asp.NET HtmlInputText внутри отключенной панели теряет свое значение при обратной передаче

У меня есть содержимое страницы asp.net, как показано ниже. Внутри панели есть элемент управления HtmlInputText с параметром Enabled="false". Я устанавливаю свойство Value элемента управления HtmlInputText в btnSet_Click, а затем устанавливаю Enabled=true для панели. После завершения обратной передачи значение HtmlInputText теряется. Ниже приведен список случаев, которые я пробовал:

  • Когда я использую asp:TextBox вместо HtmlInputText, он отлично работает. Но приведенное выше является упрощенной демонстрацией использования сложного пользовательского элемента управления. В общем, менять не вариант.
  • Когда я помещаю панель и кнопки в asp:UpdatePanel, она снова работает нормально.
  • Когда я устанавливаю disabled="disabled" (в разметке) для элемента управления HtmlInputText, он снова работает нормально.

Что может быть причиной такого поведения?

<asp:Panel ID="pnl" runat="server" Enabled="false">
  <input type="text" runat="server" id="txt" />
</asp:Panel>
<asp:Button ID="btnSet" runat="server" Text="Set" OnClick="btnSet_Click" />
<asp:Button ID="btnEnable" runat="server" Text="Enable" OnClick="btnEnable_Click" />

--

protected void btnSet_Click(object sender, EventArgs e)
{
   txt.Value = "Test";
}

protected void btnEnable_Click(object sender, EventArgs e)
{
   pnl.Enabled = true;
}

person Mehmet Ataş    schedule 13.05.2011    source источник


Ответы (1)


На самом деле элементы управления HTML-сервера (например:) не имеют механизма определения возможностей клиентского браузера, обращающегося к текущей странице. Но элементы управления веб-сервера (например: asp: TextBox) не будут иметь проблем с совместимостью браузера, поскольку они позаботятся о себе сами.

Элементы управления веб-сервером дают вам больше свободы, гибкости и контроля над поведением этих элементов управления... поэтому используйте их для своих целей.

person Harun    schedule 13.05.2011