使用NameValueCollection在ASP.NET中获取POST值

时间:2012-08-17 19:18:06

标签: asp.net forms post submit namevaluecollection

所以我有2页。它们都具有相同的母版页,并且是同一Web应用程序的一部分。我想向另一个提交一页。在提交页面上,我有一些元素,例如

<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值。我甚至不想通过硬编码混淆的ID来获取值,我不能在ASP.net元素上设置名称属性。

有谁知道更好/正确的方法来完成我正在做的事情?我想坚持使用ajaxControlToolkit组合框,因为它们对用户很好,虽然我希望我坚持使用jQuery而不是听我的朋友,现在切换太晚了。

我没有运气地看着这里

Get POST data in C#/ASP.NET

在这里

Read Post Data submitted to ASP.Net Form

在这里

http://msdn.microsoft.com/en-us/library/6c3yckfw.aspx

我尝试了PreviousPage.FindControl,我总是得到null。

谢谢你的时间!

修改

避免使用AjaxControlToolKit。如果您想要懒惰并且拖放 - 并且放弃甜蜜的UI元素,那就太好了,但让简单的事情变得简单却令人头疼!使用jQuery。

1 个答案:

答案 0 :(得分: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上了解Cross Page Posting in 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框。(如果你没有犯任何错误)

更新答案: 问题是当我们发布页面时,Ajax Combo框控件的ID会发生变化。在下一页中,我们可以将ajax combox框的ID作为

对于没有母版页的页面: 如果您使用的是没有母版页的aspx页面,那么您可以将ajax组合框的ID作为

     //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"];

对于使用MasterPages的页面:

    //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"];