sma*_*man 24 asp.net custom-server-controls servercontrols asp.net-customcontrol asp.net-controls
我有一个项目,我正在尝试在页面上注册自定义服务器控件(没有.ascx文件).我目前正在使用
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的页面上,
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" %>
<myControls:CustomControl runat="server" Text="What up!" />
Run Code Online (Sandbox Code Playgroud)
我收到一个Parser Error,消息"Unknown server tag'myControls:CustomControl'."
我究竟做错了什么?
Mat*_*zer 44
好吧,如果这个控件在另一个类库中,或者即使它在同一个库中,那么在@Register中指定控件的程序集也不是一个坏主意:
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls" Assembly="MyApp" %>
<myControls:CustomControl runat="server" Text="What's up!" />
Run Code Online (Sandbox Code Playgroud)
清理并重建您的解决方案,以验证所有内容是否正确编译!
如果您的控件将在多个页面上重用,您可能希望在web.config中注册它,作为system.web/pages/controls子元素之一,而不是在所有受影响的页面中复制粘贴相同的<@Reister标记.
web.config中:
<system.web>
<pages ...>
<controls>
...
<add tagPrefix="myCompany" namespace="MyCompany.Whatever.Controls" assembly="Whatever"/>
</controls>
Run Code Online (Sandbox Code Playgroud)
thepage.aspx:
<myCompany:ControlClassName ID="TheStuff" runat="server" ... />
Run Code Online (Sandbox Code Playgroud)
您应该将控件放在App_Code文件夹下(如果控件不在程序集中的情况下)或添加对此控件所在的程序集的引用:
<%@ Register TagPrefix="myControls" Namespace="MyApp.Controls"
Assembly="SomeAssembly" %>
Run Code Online (Sandbox Code Playgroud)
但猜测,你的控件不在App_Code文件夹下.
| 归档时间: |
|
| 查看次数: |
34485 次 |
| 最近记录: |