2010-09-07 3 views
1

Очень простая страница веб-формы asp.net.Не удается сохранить пользовательские атрибуты в DOM?

<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 «выбрать» атрибуты?

ответ

1

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

+0

Но как я могу решить эту проблему? Мне нужен пользовательский атрибут. –

+0

Ну, вы можете добавить атрибут во время разработки. Если значение может измениться, добавьте атрибут каждый раз, когда выполняется страница (т. Е. В сценарии после обратной связи). Если вам нужно сделать это много раз, я предлагаю вам написать настраиваемые элементы управления (унаследованные из раскрывающегося списка say) или пользовательские элементы управления (содержащие раскрывающийся список say), добавить код для сохранения пользовательских атрибутов в режиме view-state (переопределение методов LoadViewState и SaveViewState). – VinayC

0

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

Смежные вопросы