问题
I have a project and I am trying to register a custom server control (there is no .ascx
file) on the page. I am currently using
Class Declaration
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);
}
}
}
On my page,
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" %>
<myControls:CustomControl runat="server" Text="What up!" />
I receive a Parser Error, with the message "Unknown server tag 'myControls:CustomControl'."
What am I doing wrong?
回答1:
Well, if this control is in another class library, or even if it's in the same one, it wouldn't be a bad idea to specify control's assembly in @Register:
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" Assembly="MyApp" %>
<myControls:CustomControl runat="server" Text="What's up!" />
Clean and rebuild your solution too in order to verify everything is compiled rightly!
回答2:
If your control will be reused on several pages, you may want to register it in web.config, as one of system.web/pages/controls subelements instead of copy-pasting the same <@Register tag in all affected pages.
web.config:
<system.web>
<pages ...>
<controls>
...
<add tagPrefix="myCompany" namespace="MyCompany.Whatever.Controls" assembly="Whatever"/>
</controls>
thepage.aspx:
<myCompany:ControlClassName ID="TheStuff" runat="server" ... />
回答3:
You should put your control either under the App_Code
folder (in the case if the control not in assembly) or add a reference to assembly where this control is:
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls"
Assembly="SomeAssembly" %>
But guessing, your control not under the App_Code
folder.
回答4:
Add an assembly attribute to your register tag
来源:https://stackoverflow.com/questions/5276533/how-to-register-custom-server-control-on-asp-net-page