2010-06-09 19 views
10

Ho creato un semplice controllo personalizzato che eredita solo dal controllo Literal e non ha ancora alcuna estensione, il codice è vuoto.Controllo personalizzato in ASP.NET C#

Spazio dei nomi: CustomControls

Nome classe: Letterale: System.Web.UI.WebControls.Literal

La prossima cosa mi sta registrando questo controllo nella pagina aspx come segue:

<%@ Register TagPrefix="web" Namespace="CustomControls" %> 

(Ho letto in alcuni tutorial che questo è uno dei modi per registrarlo, oltre a web.config, ecc.)

Dopo tutto, no inte per me, e peggio, ricevo un errore di analisi 'unknown server tag: web' quando provo a eseguire la pagina con il controllo al suo interno.

Ho usato "crea nuovo progetto" e non nuovo sito Web, nel caso in cui siano necessarie queste informazioni.

Quale potrebbe essere il mio problema?

Grazie in anticipo.

+0

Cosa intendi esattamente per "creare un nuovo progetto"? File -> Nuovo -> Progetto -> ... (almeno in VS 2005) E poi, cos'hai combinato? Questo potrebbe essere importante (cioè hai scelto Other Languages ​​-> Visual C# -> Web -> qualunque cosa?). E a un certo punto hai bisogno di un assemblaggio; la domanda è se devi nominarlo esplicitamente (e penso che devi farlo se non stai utilizzando un progetto "Sito web" perché non hai una cartella App_Code). – scherand

+0

Dove si trova la classe di controllo personalizzata? È un file di classe nel progetto del sito web o è nel suo stesso progetto? –

+0

Quindi hai due progetti uno per 'CustomControls' e un altro per il progetto web? – Craig

risposta

25

Ecco come ho fatto , passo dopo passo partendo dal nulla. Questo primo metodo utilizza un secondo progetto/assembly. Per la versione App_code scorrere verso il basso.

Web Application progetto Metodo

  1. Creare una nuova applicazione Web ASP.Net. Prendi nota del nome, il mio si chiama WebApplication2. Se hai già un'applicazione web esistente, che è probabile, fai doppio clic sulla sezione delle proprietà del tuo progetto e verifica la proprietà "Nome assieme", prendi nota di essa.
  2. creare una nuova classe nel applcation web chiamato Literal.cs
  3. Mettere in codice simile a quanto segue per il defenition classe:

    namespace CustomControls 
    { 
        public class Literal : System.Web.UI.WebControls.Literal 
        { 
        } 
    } 
    
  4. Aggiungere il seguente tag registro per la parte superiore del aspx pagina

    <% assemblaggio @ Register = " WebApplication2 " namespace = " CustomControls " TagPrefix = " web "% >

Se il tuo nome assembly era diverso quindi modificare qui. Ho notato che quando lo facevo in VB.Net lo spazio dei nomi era WebApplication1.CustomControls invece di solo CustomControls come in C#, un po 'strano.

  1. Aggiungere il nuovo controllo alla pagina:

    < web: ID letterale = " Literal1 " runat = " server di " Text = " prova "/>

separata Progetto Metodo

  1. Creare un nuovo sito Web vuoto (ASP.Net).
  2. Aggiungere una nuova libreria di controllo server ASP.Net denominata CustomControls alla soluzione.
  3. Aggiungere una nuova classe al nuovo progetto denominato Literal (sto usando C# in modo che il mio file si chiami Literal.cs). Di seguito è riportato il mio codice di base super, che credo debba corrispondere al codice descritto nella domanda.

    namespace CustomControls 
    { 
        public class Literal : System.Web.UI.WebControls.Literal 
        { 
        } 
    } 
    
  4. Aggiungere un riferimento al progetto CustomControls al proprio sito Web.

  5. Aggiungere la registrazione di montaggio alla parte superiore della pagina aspx:

    <% assemblaggio @ Register = " CustomControls " namespace = " CustomControls " TagPrefix = " web "% >

  6. Aggiungi un nuovo istanza del controllo sulla tua pagina:

    < web: ID letterale = " Literal1 " runat = server di " " Text = " prova "/>

In Metodo App_Code

  1. Creare un nuovo sito Web vuoto (ASP.Net).
  2. Aggiungere una nuova classe alla cartella App_Code Literal2 (Sto utilizzando C# in modo che il mio file si chiami Literal2.cs). Di seguito è riportato il mio codice di base super, che credo debba corrispondere al codice descritto nella domanda.L'ho chiamato 2 in modo che è possibile utilizzare questo in combinazione con il metodo sopra descritto senza ottenere errori di compilazione

    namespace CustomControls 
    { 
        public class Literal2 : System.Web.UI.WebControls.Literal 
        { 
        } 
    } 
    
  3. Registrare l'assembly/spazio dei nomi per App_Code nella tua pagina aspx aggiungendo la seguente riga alla parte superiore

    <% @ Register Namespace = " CustomControls " Assemblea = " __code " TagPrefix = " web "% >

  4. Aggiungere un'istanza del nuovo controllo alla pagina:

    < web: Literal2 ID = " literal2 " runat = " server di " Text = " test2 "/>

Ho provato questo utilizzando Visual Studio e tutto ha funzionato bene per me.

+0

Grazie per le informazioni dettagliate, questo funziona perfettamente nel sito web progetto. il problema è con WebApplicationProject in VS2008. – Mahes

+1

@Mahes - Ho aggiornato la mia risposta per includere le indicazioni dell'applicazione Web (sono in cima). – Peter

+0

@Mahes - Per favore fatemi sapere se il codice che ho postato non funziona per voi. – Peter

2

È inoltre possibile registrare il vostro controllo in web.config se si desidera utilizzarlo su altre pagine

<pages> 
     <controls> 
      <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add tagPrefix="web" namespace="MyProject.CustomControls" assembly="MyProject" /> 
     </controls> 
     </pages> 

per il sito web questo funzionerà

<add tagPrefix ="web" namespace="ASP.App_Code.CustomControls" /> 
+1

Grazie per la risposta, Il problema è che non ho ancora alcun file di assembly e, come ho capito, il controllo può essere registrato solo da tagprefix e namespace, anche senza assembly. ho ragione ? – geevee

+1

Se hai creato un progetto di applicazione web, avrai un assemblaggio, vedi: http://dl.dropbox.com/u/6561262/project-settings.png – orjan

2

Il problema si trova nel tag <%@ Register TagPrefix="web" Namespace="CustomControls" %>: manca il nome dell'assembly!

Deve diventare <%@ Register TagPrefix="web" Namespace="CustomControls" Assembly="YourAssemblyName" %>. Se avete difficoltà a trovare il nome di montaggio per la classe di qui ci sono alcuni suggerimenti:

  1. Se avete creato la classe all'interno del progetto di Visual Studio dell'applicazione web, o in una DLL separata progetto (libreria condivisa), poi a destra clicca il progetto e andare a Proprietà per ottenere il nome di montaggio
  2. Se è stato creato il file con estensione cs nella directory App_Code, ASP.App_Code dovrebbe funzionare

in caso contrario si prega di dare alcune informazioni su layout del progetto!

+0

grazie. anche specificando il nome dell'assembly non si risolve il problema con WebApplicationProject in VS2008 – Mahes

1

La cosa più semplice da fare è trascinare e rilasciare Literal.ascx sulla pagina (se la pagina è nella stessa soluzione). Se la pagina è un'altra soluzione, è possibile aggiungere il controllo alla casella degli strumenti VS e trascina il controllo sulla pagina.

0

Hai dimenticato l'attributo src.

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %>