2014-12-29 3 views
1

Я новичок в ASP.NET и C#, и я пытаюсь создать форум. У меня есть HTML-выбор в моем .aspx-файле и HTML-кнопке, а внутри файла .aspx.cs я хочу получить это значение выбора HTML при нажатии кнопки, но он всегда дает мне значение по умолчанию, а не один фактически выбран.HTML select value не изменяется

Это в моем файле .aspx:

<select id="sortBySelect" runat="server"> 
    <option value="default">Default</option> 
    <option value="username">Username</option> 
    <option value="date">Data</option> 
</select> 

<button id="sortByButton" runat="server" onserverclick="sortBy">Sort</button> 

И в моем .aspx.cs файл у меня есть это:

public void sortBy(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine(sortBySelect.Value); 
} 

Я также не могу использовать кнопку жерех DROPDOWNLIST/жерех, потому что он говорит, что он должен оставаться внутри тега формы с «runat =« server »», но у меня уже есть тег формы в моем .aspx-файле, и если я добавлю еще один, он говорит, что у меня нет двух тегов формы с "Runat =" сервер "".

Как я могу взять фактически выбранное значение этого выбора HTML?

+0

использование

+1

Привет Александр. Если вы новичок в asp.net и C#, особенно если у вас есть какой-либо другой опыт веб-программирования, я бы * настоятельно рекомендую вам использовать инфраструктуру asp.net mvc, а не структуру webforms, которую вы используете. Mvc имеет гораздо более простые концепции, более естественные для формата Интернета, и, как правило, более качественные советы. Иногда веб-формы могут быть полезны, но я никогда не буду использовать его для чего-то подобного и никогда не рекомендую его новичкам. –

+0

@ Igor Semin Я попытался поместить свой HTML-код внутри тега формы, но с методом = «get» моя функция «sortBy» не вызывается и с/без метода = «post» изменяет URL-адрес, который используется моим приложением и, таким образом, обработка страницы не удалась. –

ответ

0

Вы не возвращаете значение, так как «выберите» не является частью формы и, таким образом, не отправляется обратно на отправку. Кнопка, которую вы используете для сортировки здесь, должна быть таргетирующей формой, которая содержит «select». Рассмотрим только одну форму на вашей странице.

EDIT: К вашим комментариям о количестве форм. Если вы добавите дополнительную форму, вам нужно будет поддерживать логику для ее поддержки, так как по умолчанию ASP.Net поддерживает только те, которые отмечены как runat = "server". Это включает в себя сохранение данных между обратными передачами, отсутствие событий сервера ASP.Net и т. Д.

+0

Я также думал о том, что на моей странице есть только одна форма, но на каждой странице я должен иметь форму регистрации, например, на обычном форуме. –

2

В веб-форме ASP.Net требуется тег формы runat="server". Кроме того, вы не должны манипулировать тегом формы.

Элементы управления ASP.Net использует ViewState для хранения информации о состоянии между почтовыми серверами. Поэтому вы хотите использовать Контроллеры сервера, такие как DropDownList(если вы не знаете, что вам не нужен ViewState).

<form id="form1" runat="server"> 
    <asp:DropDownList ID="SortByDropDownList" 
     runat="server"> 
     <asp:ListItem Value="default">Default</asp:ListItem> 
     <asp:ListItem Value="username">Username</asp:ListItem> 
     <asp:ListItem Value="date">Data</asp:ListItem> 
    </asp:DropDownList> 
    <asp:Button runat="server" ID="SortByButton" 
     Text="Sort" 
     OnClick="SortByButton_Click" /> 
</form> 

protected void SortByButton_Click(object sender, EventArgs e) 
{ 
    string value = SortByDropDownList.SelectedValue; 
}