Как программно отличить типы элементов/элементов управления от коллекции ключей/значений ASP.NET Request.Form?

У меня есть простая веб-форма ASP.NET, как показано ниже:

<form id="form1" runat="server">
    <asp:TextBox ID="txt" runat="server"></asp:TextBox>
    <asp:DropDownList ID="ddl" runat="server">
        <asp:ListItem Text="X" Value="X"></asp:ListItem>
        <asp:ListItem Text="Y" Value="Y"></asp:ListItem>
        <asp:ListItem Text="Z" Value="Z"></asp:ListItem>
    </asp:DropDownList>
    <asp:Button ID="btn" runat="server" Text="Button" />
</form>

Request.Form содержит следующие пары "ключ-значение":

[0] _VIEWSTATE
[1] _EVENTVALIDATION
[2] txt
[3] ddl
[4] btn

Как отличить кнопку (btn) от значения текстового поля (txt) или значения раскрывающегося списка (ddl)? Или мне нужно как-то придумать соглашение об именах? Я пытаюсь выполнить итерацию объекта Request.Form и сохранить значения формы в хэш-таблицу для последующего использования.

Спасибо.


person Jeff    schedule 21.12.2009    source источник


Ответы (2)


Вы не можете. Для сервера это простая коллекция имя:значение.

Почему бы не позволить фреймворку позаботиться об этом за вас?

В отделенном коде вы можете получить значения через их свойства:

ddl.SelectedText
txt.Text
person Chuck Conway    schedule 21.12.2009
comment
Итак, пользовательское соглашение об именах — это путь? - person Jeff; 21.12.2009
comment
Можно, но это было бы изобретением велосипеда. ASP.Net уже делает это. - person Chuck Conway; 21.12.2009
comment
Поскольку элементы управления html отрисовываются динамически, поэтому я хочу только собирать опубликованные значения и сохранять их в хэш-таблицу. Если вы делаете txt.Text, ASP.NET просто выполняет поиск, например Request.Form[txt], чтобы получить значение, которое я считаю. - person Jeff; 21.12.2009

Способ различать различные поля Request.Form состоит в том, чтобы связать имена полей с именами элементов управления, что и делает каждый элемент управления.

Каждый элемент управления знает свой идентификатор. На этапе инициализации каждый элемент управления устанавливает или восстанавливает свое состояние на основе как Request.Form, так и ViewState.

Для динамически создаваемых элементов управления платформа будет обрабатывать это за вас при условии, что вы создадите элементы управления и добавите их в дерево элементов управления до этапа инициализации (например, в обработчике событий OnPreInit).

Если вы хотите сделать это самостоятельно, вы можете имитировать процесс, пройдясь по дереву управления.

person RickNZ    schedule 21.12.2009