我在标准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 Alert:如果我在OnLoad中设置了一个断点,请单击按钮,然后检查cb.Attributes["data-a"]
,cb.InputAttributes["data-b"]
和cb.LabelAttributes["data-c"]
的值,则这些值为1
,[C0 ]和2
(而不是null
)。另外,检查值也会影响输出!
3
如果您仍然对此感到困惑,那是一个错误。
升级到.net framework 4.8(及更高版本)以进行修复。
我看到您还向Microsoft提交了错误报告:<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>