【问题标题】:Can't keep custom attributes in DOM?不能在 DOM 中保留自定义属性?
【发布时间】:2010-09-07 08:39:20
【问题描述】:

一个非常简单的 asp.net 网页。

<asp:DronDownList id="ddl" runat="server">
<asp:Button id="btn" runat="server" Text="Do nothing but post back" />

在 Page_Load 中:

if (!IsPostBack)
{
   ListItem item = new ListItem("text1","value1");
   item.Attributes["custom"] = "CustomValue";
   ddl.Items.Add(item);
}

它呈现的html:(看起来不错)

<select ...>
  <option value="value1" custom="CustomValue">text1</option>
</select>

点击按钮后,查看源码,custom="CustomValue" 不见了。 我知道你会说“这是因为你把它放在了if (!IsPostBack) 块中”。当然,如果我删除 if 语句,一切都会好起来的。但是为什么要渲染其他 STANDARD 属性呢?由于我把它放在if 语句中,我想输出将是:

<select ...></select>   // i suppose no options in it! 

为什么 ASP.NET “选择”属性?

【问题讨论】:

    标签: c# javascript asp.net browser viewstate


    【解决方案1】:

    这是一种权衡。控件必须保持它在视图状态中支持的每个属性的(非默认)值。所以自然会影响视图状态大小,从而影响页面大小。因此,控件开发人员仅将最常用的属性支持到视图状态是有意义的。这里的情况也是如此 - 控件开发人员决定不将自定义属性支持到视图状态中。

    【讨论】:

    • 但是我该如何解决这个问题呢?我需要自定义属性。
    • 你可以在设计时添加属性。如果该值可能会更改,则在每次页面运行时添加该属性(即在回发场景中也是如此)。如果您必须多次这样做,那么我建议您编写自定义控件(从说下拉列表继承)或用户控件(包含说下拉列表),添加代码以在视图状态中保留自定义属性(覆盖 LoadViewState 和 SaveViewState 方法)。
    【解决方案2】:

    ASP .NET 不在 ViewState 中保存自定义属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 2020-01-30
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2023-03-25
      相关资源
      最近更新 更多