Не можете сохранить пользовательские атрибуты в DOM? - PullRequest
1 голос
/ 07 сентября 2010

Очень простая страница веб-формы asp.net.

<asp:DronDownList id="ddl" runat="server">
<asp:Button id="btn" runat="server" Text="Do nothing but post back" />

В Page_Load:

if (!IsPostBack)
{
   ListItem item = new ListItem("text1","value1");
   item.Attributes["custom"] = "CustomValue";
   ddl.Items.Add(item);
}

HTML-код, который он отображает: (выглядит хорошо)

<select ...>
  <option value="value1" custom="CustomValue">text1</option>
</select>

После нажатия кнопки я просматриваю источник, custom="CustomValue" пропал. Я знаю, что вы скажете: «Это потому, что вы поместили его в блок if (!IsPostBack)». Конечно, все будет хорошо, если я уберу оператор if. Но почему отображаются другие атрибуты STANDARD? Поскольку я поместил его в оператор if, я полагаю, что результат будет:

<select ...></select>   // i suppose no options in it! 

Почему ASP.NET "выбирает" атрибуты?

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

Это компромисс.Элемент управления должен сохранять (не по умолчанию) значение каждого атрибута, который он поддерживает в состоянии просмотра.Таким образом, это естественно влияет на размер состояния просмотра и, следовательно, на размер страницы.Следовательно, разработчикам элементов управления имеет смысл только возвращать наиболее часто используемые атрибуты в состояние просмотра.То же самое было и здесь: разработчики элементов управления решили не возвращать пользовательские атрибуты в состояние просмотра.

0 голосов
/ 07 сентября 2010

ASP .NET не сохраняет пользовательский атрибут в ViewState.

...