所以我有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而不是听我的朋友,现在切换太晚了。
我没有运气地看着这里
在这里
Read Post Data submitted to ASP.Net Form
在这里
http://msdn.microsoft.com/en-us/library/6c3yckfw.aspx
我尝试了PreviousPage.FindControl,我总是得到null。
谢谢你的时间!
修改
避免使用AjaxControlToolKit。如果您想要懒惰并且拖放 - 并且放弃甜蜜的UI元素,那就太好了,但让简单的事情变得简单却令人头疼!使用jQuery。
答案 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"];