我今天大部分时间都在试图解决这个问题,我很兴奋,所以任何见解都将不胜感激。我有一个 Web 用户控件(我们在整个应用程序中使用它们而不是典型的 Web 表单),上面有 4 个控件。一个 RadioButtonList、一个按钮、一个复选框列表和一个 DataGrid。控件本身并不重要,但我只是在此处提及它们以作为上下文。网格是一种典型的网格,它将根据通过上述控件进行的选择来显示结果。
一切都按预期工作,直到我不得不进行更改,我必须使用 Response.Redirect 到带有查询字符串的同一页面,以便网格将根据传入的查询字符串显示结果。我注意到的是这个重定向页面,在回发时,我无法获取控件的值。因此,例如,当我在 RadioButtonList 中选择一个值(自动回发设置为 true)时,会触发 PageLoad,但触发更改的值在 Page_Load 中不可用 - 而是显示先前的值。每次,我在 RadioBUttonList 中选择不同的值,Page_Load 显示的不是当前值(导致 PostBack 的值)而是前一个值。
我究竟做错了什么?这甚至可能吗?我已经调试了一天,发现除了这个问题之外,一切都可以正常工作。原始页面(完成重定向的页面)没有显示任何这些。请帮助我了解发生了什么..
根据要求添加代码示例。
public partial class ParentPage :
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
labelMessage.Text = "";
if (Page.IsPostBack == false)
{
//Initialize Page
InitializePage();
//Read query string and initialize page
Hashtable queryparms = HttpQueryString.Decrypt(Request.Url.ToString());
if (queryparms["OptionsChartType"] != null)
{
string[] strChartType = queryparms["OptionsChartType"].ToString().Split(',');
foreach ( string s in strChartType)
{
chkboxChartType.Items.FindByValue(s).Selected = true;
}
}
if (queryparms["OptionsRblBiasOptions"] != null)
rblBiasOptions.SelectedValue = queryparms["OptionsRblBiasOptions"].ToString();
if (queryparms["OptionsChartStyle"] != null)
rblChartStyle.SelectedValue = queryparms["OptionsChartStyle"].ToString();
if (queryparms["OptionsDisplay"] != null)
{
string[] strDisplayOptions = queryparms["OptionsDisplay"].ToString().Split(',');
foreach ( string s in strDisplayOptions )
{
chkboxDisplay.Items.FindByValue(s).Selected = true;
}
}
if( queryparms.Count > 1)
BindGrid();
}
else
{
//Require this for sorting to work
string abc = rblChartStyle.SelectedValue;
BindGrid();
}
}
}
//Method that calls the Response.redirect
private void DisplayDetails()
{
StringBuilder sb = new StringBuilder("~/MyContainer.aspx?ctrlPath=ParentPage.ascx");
sb.Append("&OptionsChartType=" + CollectionToString(chkboxChartType.Items));
sb.Append("&OptionsRblBiasOptions=Subject");
sb.Append("&OptionsChartStyle=" + rblChartStyle.SelectedValue);
sb.Append("&OptionsDisplay=" + CollectionToString(chkboxDisplay.Items));
SaveUrl();
Response.Redirect(HttpQueryString.Encrypt(sb.ToString()),false);
this.Context.ApplicationInstance.CompleteRequest();
}
您将在上面的代码中看到 DisplayDetails 方法使用查询字符串重定向到 ParentPage 本身。重定向按原样正常工作,但是一旦我们到达重定向页面,RadioButtonList 等上导致回发的任何后续活动都不会在 Page_Load 中反映更改。因此,如果我将 RadioButtonList 的选定值从“A”更改为“B”,PageLoad 方法中的字符串“abc”仍然具有值“A”。如果我将“B”改回“A”,字符串“abc”现在有“A”,这是以前的值。