Почему InputAttributes и LabelAttributes CheckBox не отображаются после обратной передачи? - PullRequest
0 голосов
/ 02 июля 2018

Я вижу странное поведение в стандартном элементе управления ASP.NET CheckBox. Вот репродукция:

Разметка ASPX

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

C # code-behind

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"], тогда значения будут 1 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...