Domanda

Ho creato un semplice controllo personalizzato che solo eredita dal controllo Literal, e non ha ancora alcun estensioni, il codice è vuota.

Namespace: 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 qualche tutorial che questo è uno dei modi per registrarlo, oltre web.config, ecc.)

Dopo tutto, nessuno Intellisence per me, e worse- ottengo un errore di analisi 'tag del server: web'. Quando tento di eseguire la pagina con il controllo in esso

ho usato 'creare nuovo progetto' e non nuovo sito, nel caso in cui è necessaria questa informazione.

Quale potrebbe essere il mio problema?

Grazie in anticipo.

È stato utile?

Soluzione

Ecco come ho fatto, passo dopo passo, partendo dal nulla. Questo primo metodo utilizza un secondo progetto / montaggio. Per la versione di scorrimento verso il basso App_Code.

Web Application metodo di progetto

  1. Creare una nuova applicazione Web ASP.Net. Prendere nota del nome, la mia si chiama WebApplication2. Se si dispone già di un'applicazione Web esistente, che rischia, fare doppio clic sulla sezione proprietà del progetto e controllare la proprietà "Assemblea Name", prendere nota di esso.
  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 della pagina aspx

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

Se il tuo nome assembly era diverso quindi modificare qui. Ho notato che quando ho fatto questo in VB.Net spazio dei nomi era WebApplication1.CustomControls anziché solo CustomControls come se fosse in C #, un po 'strano.

  1. Aggiungere il nuovo controllo alla pagina:

separato metodo di progetto

  1. Crea un nuovo sito Web vuoto (ASP.Net).
  2. Aggiungi una biblioteca di controllo nuova ASP.Net Server CustomControls nome alla soluzione.
  3. aggiungere una nuova classe al nuovo progetto chiamato letterale (sto usando C # quindi il mio file è denominato Literal.cs). Qui di seguito è il mio codice di base super, che credo dovrebbe corrispondere al codice descritto nella questione.

    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  4. Aggiungere un riferimento alle CustomControls proiettano al tuo sito web.

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

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

  6. Aggiungi una nuova istanza del controllo alla tua pagina:

In App_Code Metodo

  1. Crea un nuovo sito Web vuoto (ASP.Net).
  2. aggiungere una nuova classe al App_Code cartella Literal2 (sto usando C # quindi il mio file è denominato Literal2.cs). Qui di seguito è il mio codice di base super, che credo dovrebbe corrispondere al codice descritto nella domanda. L'ho chiamato 2 in modo da poter 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" Assembly = "__ codice" TagPrefix = "web" %>

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

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

Altri suggerimenti

Si può anche registrare il 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 lavoro sarà

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

Il problema sta nel tag <%@ Register TagPrefix="web" Namespace="CustomControls" %>: manca il nome di montaggio

Si 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 è stato creato la classe all'interno del progetto di Visual Studio dell'applicazione web, o in un progetto DLL separata (libreria condivisa), quindi fare clic destro del progetto e selezionare 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, vi preghiamo di darci qualche informazione su layout del progetto!

La cosa più semplice da fare è quello di drag-and-drop il Literal.ascx sulla pagina (se la pagina è nella stessa soluzione) .Se la pagina è un'altra soluzione, si potrebbe aggiungere il controllo di strumenti e VS drag-and-drop del controllo della pagina.

Si dimenticò l'attributo src.

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top