为什么回发后未呈现CheckBox的InputAttributes和LabelAttributes?

时间:2018-07-02 14:00:39

标签: c# asp.net webforms postback

我在标准ASP.NET CheckBox控件中看到了一些奇怪的行为。这是一个复制品:

ASPX标记

<form runat="server">
    <asp:CheckBox runat="server" ID="cb" Text="Foo" />
    <asp:Button runat="server" Text="Submit" />
</form>

C#隐藏代码

protected override void OnLoad(EventArgs e)
{
    if (!IsPostBack)
    {
        cb.Attributes.Add("data-a", "1");
        cb.InputAttributes.Add("data-b", "2");
        cb.LabelAttributes.Add("data-c", "3");
    }
}

在初始页面请求中,CheckBox控件呈现所有三个data属性:

<span data-a="1">                                           <!-- RIGHT -->
    <input id="cb" type="checkbox" name="cb" data-b="2" />  <!-- RIGHT -->
    <label for="cb" data-c="3">Foo</label>                  <!-- RIGHT -->
</span>

但是在我单击Submit按钮之后,CheckBox控件仅呈现data-a属性:

<span data-a="1">                                           <!-- RIGHT -->
    <input id="cb" type="checkbox" name="cb" />             <!-- WRONG -->
    <label for="cb">Foo</label>                             <!-- WRONG -->
</span>

为什么回发后缺少InputAttributes和LabelAttributes?

Heisenbug警报:如果我在OnLoad中设置了断点,请单击按钮,然后检查cb.Attributes["data-a"]cb.InputAttributes["data-b"]cb.LabelAttributes["data-c"]的值,那么这些值分别是12null(而不是3)。另外,检查值会影响输出!

<span data-a="1">                                           <!-- RIGHT -->
    <input id="cb" type="checkbox" name="cb" data-b="2" />  <!-- RIGHT -->
    <label for="cb" data-b="2">Foo</label>                  <!-- WTF?! -->
</span>

1 个答案:

答案 0 :(得分:1)

如果您仍然对此感到困惑,那是一个错误。

升级到.net Framework 4.8(及更高版本)进行修复。

我看到您还向Microsoft提交了错误报告:https://developercommunity.visualstudio.com/content/problem/287564/buggy-handling-of-inputattributes-and-labelattribu.html