0

所以我有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

值为“选项 1”,但我的字符串仍包含 null 值。我什至不想通过硬编码混淆的 ID 来获取值,而且我无法在 ASP.net 元素上设置名称属性。

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

我看这里没有任何运气

在 C#/ASP.NET 中获取 POST 数据

和这里

读取提交到 ASP.Net 表单的 Post 数据

和这里

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

我尝试了 PreviousPage.FindControl ,但我总是得到空值。

谢谢你的时间!

编辑:

避免使用 AjaxControlToolKit。如果您想偷懒并拖放甜蜜的 UI 元素,这很好,但让简单的事情正常工作只是一件令人头疼的事情!使用 jQuery。

4

1 回答 1

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 组合框上。(如果你没有犯任何错误)

更新答案: 问题是我们发布页面时更改了Ajax Combo box控件的ID。在下一页中,我们可以获得 ajax 组合框的 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"];
于 2012-08-17T19:38:20.907 回答