Frage So registrieren Sie das benutzerdefinierte Serversteuerelement auf der ASP.NET-Seite


Ich habe ein Projekt und ich versuche, ein benutzerdefiniertes Serversteuerelement zu registrieren (es gibt keine .ascx Datei) auf der Seite. Ich benutze derzeit

Klassenerklärung

namespace MyApp.Controls{
    public class CustomControl: WebControl{
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }
            set
            {
                ViewState["Text"] = value;
            }
        }        
        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);
        }
    }
}

Auf meiner Seite,

<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" %>
<myControls:CustomControl runat="server" Text="What up!" />

Ich erhalte einen Parserfehler mit der Nachricht "Unbekanntes Server-Tag 'myControls: CustomControl'."

Was mache ich falsch?


23
2018-03-11 17:54


Ursprung


Antworten:


Nun, wenn sich dieses Steuerelement in einer anderen Klassenbibliothek befindet oder selbst wenn es in derselben Klasse ist, wäre es keine schlechte Idee, die Assembly des Steuerelements in @Register anzugeben:

<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" Assembly="MyApp" %>
   <myControls:CustomControl runat="server" Text="What's up!" />

Reinigen und bauen Sie Ihre Lösung neu auf, um zu überprüfen, ob alles korrekt kompiliert wurde!


41
2018-03-11 18:00



Wenn Ihr Steuerelement auf mehreren Seiten wiederverwendet wird, möchten Sie es möglicherweise in web.config als eines der Unterelemente system.web / pages / controls registrieren, anstatt das gleiche <@Register-Tag auf allen betroffenen Seiten zu kopieren.

web.config:

<system.web>
  <pages ...>
    <controls>
      ...
      <add tagPrefix="myCompany" namespace="MyCompany.Whatever.Controls" assembly="Whatever"/>
    </controls>

thepage.aspx:

<myCompany:ControlClassName ID="TheStuff" runat="server" ... />

7
2018-04-30 09:59



Sie sollten Ihre Kontrolle entweder unter die App_Code Ordner (falls das Steuerelement nicht in Assembly ist) oder fügen Sie einen Verweis auf Assembly hinzu, wo dieses Steuerelement ist:

<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls"
      Assembly="SomeAssembly" %>

Aber raten, deine Kontrolle nicht unter App_Code Mappe.


5
2018-03-11 17:59



Fügen Sie Ihrem Registrierungs-Tag ein Assembly-Attribut hinzu


4
2018-03-11 18:09