Получить значения POST в ASP.NET, используя NameValueCollection
Итак, у меня есть 2 страницы. Они оба имеют одну и ту же главную страницу и являются частью одного и того же веб-приложения. Я пытаюсь отправить одну страницу на другую. На странице отправки у меня есть несколько элементов, таких как
<ajaxToolkit:ComboBox ID="cmboOptions" AutoCompleteMode="SuggestAppend"
CaseSensitive="false" ItemInsertLocation="Append" runat="server" DropDownStyle="DropDownList">
<asp:ListItem></asp:ListItem>
<asp:ListItem Text="Option 1" Value="opt1"></asp:ListItem>
<asp:ListItem Text="Option 2" Value="opt2"></asp:ListItem>
</ajaxToolkit:ComboBox>
я использую
<asp:Button ID="btnSubmit" runat="server" Text="Submit"
PostBackUrl="~/Results.aspx" />
отправить страницу.
На странице результатов в коде на странице загрузки у меня есть
NameValueCollection nvc = Request.Form;
string selectedOption = nvc["cmboOptions"];
Если я смотрю в NVC на отладку, я вижу
ctl00$MainContent$cmboOptions$TextBox
со значением "Option 1", но моя строка по-прежнему содержит значение null. Я не хочу даже пытаться получить значение путем жесткого кодирования запутанных идентификаторов, и я не могу установить свойство name для элементов ASP.net.
Кто-нибудь знает лучший / правильный способ выполнить то, что я делаю? Я хотел бы придерживаться комбинированных списков ajaxControlToolkit, потому что они удобны для пользователя, хотя я бы хотел остаться с jQuery вместо того, чтобы слушать моего друга, и теперь уже слишком поздно переключаться.
Я посмотрел здесь без удачи
Получить данные POST в C#/ASP.NET
и здесь
Прочитать данные поста, отправленные в форму ASP.Net
и здесь
http://msdn.microsoft.com/en-us/library/6c3yckfw.aspx
и я попробовал PreviousPage.FindControl, и я всегда получаю нулевое значение.
Спасибо за ваше время!
Редактировать:
Избегайте AjaxControlToolKit. Хорошо, если вы хотите быть ленивым и перетаскивать приятные элементы пользовательского интерфейса, но это просто головная боль, чтобы заставить работать простые вещи! Используйте jQuery.
1 ответ
Я думаю, что вы должны использовать свойство Page.PreviousPage Вы можете получить раскрывающееся значение как
if (Page.PreviousPage != null)
{
DropDownList ddl= (DropDownList)Page.PreviousPage.FindControl("cmboOptions$cmboOptions_TextBox");
// You have an AjaxToolkit Combo Box, so you must cast it as
AjaxToolKit.ComboBox ddl= (AjaxToolKit.ComboBox )Page.PreviousPage.FindControl("cmboOptions");
if (ddl != null)
{
// do your work
}
}
Читайте больше на msdn о кросс-постинге в Asp.net
Обновленный ответ: Чтобы проверить код Стива, я создал страницу с выпадающим списком и кнопкой для обратной передачи (в настоящее время у меня нет ajaxtoolkit, поэтому я использую выпадающий список)
<asp:DropDownList ID="ddl" runat="server" >
<asp:ListItem></asp:ListItem>
<asp:ListItem Text="Option 1" Value="opt1" > </asp:ListItem>
<asp:ListItem Text="Option 2" Value="opt2" ></asp:ListItem>
</asp:DropDownList>
<asp:Button ID="btnSubmit" runat="server" Text="Submit"
PostBackUrl="~/Default4.aspx" />
// This code was written on Default5.aspx
// Default4.aspx code behind
protected void Page_Load(object sender, EventArgs e)
{
NameValueCollection nvc = Request.Form;
string val = Request.Form["ddl"];
string val2 = nvc["ddl"];
// Both above statement returns the required result
}
Итак, я думаю, что проблема с Ajax Combo Box (если вы не делаете никакой ошибки)
Обновленный ответ: Проблема в том, что идентификатор элемента управления Ajax Combo изменяется, когда мы публикуем страницу. На следующей странице мы можем получить идентификатор поля со списком ajax как
Для страниц без главных страниц: если вы используете страницу aspx без главной страницы, то вы можете получить идентификатор комбинированного окна ajax как
//Ajax Combo Box ID format
ComboBoxID + "$TextBox"
// so If I have a combo box with ID ComboBox1 it becomes
ComboBox1$TextBox
so we will get the value as
string comboBoxvalue = Request.Form["ComboBox1$TextBox"];
or
NameValueCollection nvc = Request.Form;
string cmbvalue = nvc["ComboBox1$TextBox"];
Для страниц, использующих Master Pages:
//Ajax Combo Box ID format
"ctl00$" + ContentPlaceHolderID +"$" + ComboBoxID + "$TextBox"
//I have a combox Box with ID ComboBox1 and ContentPlaceHolderID ContentPlaceHolder1
so AjaxComboBox ID becomes ctl00$ContentPlaceHolder1$ComboBox1$TextBox
string cmbvalue = nvc["ctl00$ContentPlaceHolder1$ComboBox1$TextBox"];
// In your case
// ComboxBox ID is cmboOptions and ContentPlaceHolderID is MainContent
// so your ID becomes
ctl00$MainContent$cmboOptions$TextBox
// so you will get the data as
string cmbvalue = nvc[" ctl00$MainContent$cmboOptions$TextBox"];