【发布时间】:2018-12-10 18:53:39
【问题描述】:
我在标准 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>
但是在我点击提交按钮后,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 Alert: 如果我在 OnLoad 中设置断点,单击按钮,然后检查 cb.Attributes["data-a"]、cb.InputAttributes["data-b"] 和 cb.LabelAttributes["data-c"] 的值,则值为 @987654330 @、2 和 null(而不是 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>
【问题讨论】:
标签: c# asp.net webforms postback