我在ASP.NET Web窗体项目中有一个继承自System.Web.UI.Control
。
我想在标记中添加与该控件的属性不对应的属性,例如。
<myControls:Hyperlink runat=server custom-client-side-attr="1"></<myControls:Hyperlink>
我遇到的问题是异常
输入&#39; myControls.Hyperlink&#39;没有名为的公共财产 &#39;自定义客户端-ATTR&#39;
我尝试了PersistChildren(false)
,但这并不能解决问题。我已经有一段时间了,因为我已经深入ASP.NET Web Forms,并且不记得这是如何完成的。
答案 0 :(得分:3)
您必须在服务器代码中添加它们:
hl1.Attributes["custom-client-side-attr"] = "1";
您仍然可以在标记中执行此操作 - 您必须在声明之前执行此操作:
<% hl1.Attributes["custom-client-side-attr"] = "1"; %>
<myControls:Hyperlink ID="hl1" runat=server custom-client-side-attr="1"></<myControls:Hyperlink>
答案 1 :(得分:0)
如果你想要这样的属性,你必须为用户控件创建一个属性。您可以使用viewstate或hidden控件来保持属性的持久性。您的代码可能如下所示:
public string custom_client_side_attr
{
get {
if (ViewState["custom_client_side_attr"] != null)
{
return ViewState["custom_client_side_attr"].ToString();
}
return string.Empty;
}
set
{
ViewState["custom_client_side_attr"] = value;
//set custom atribute for the hyperlink here
}
}
通过标记访问该属性:
<myControls:Hyperlink id="myCustomControl" runat=server custom_client_side_attr="1"></<myControls:Hyperlink>
或代码中:
myCustomControl.custom_client_side_attr="1";
答案 2 :(得分:0)
如果您的自定义控件是从WebControl
派生的,那么它似乎可以按您的意愿工作。