Получить значения 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"];
Другие вопросы по тегам