ASP.NET控件呈现HTML属性

时间:2013-09-03 17:31:21

标签: html asp.net webforms

我在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,并且不记得这是如何完成的。

3 个答案:

答案 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派生的,那么它似乎可以按您的意愿工作。