今天我已经花了很多时间试图解决这个问题而且我在自己身边,所以任何见解都会非常感激。我有一个Web用户控件(我们使用它们而不是整个应用程序中的典型Web表单),它有4个控件。 RadioButtonList,按钮,checkboxlist和DataGrid。这样的控制并不重要,但我只是在这里提到它们的背景。网格是典型的网格,它将根据通过上述控件进行的选择显示结果。
所有工作都按预期工作,直到我必须进行更改,我必须使用Response.Redirect到查询字符串的同一页面,以便网格将根据传入的查询字符串显示结果。我注意到了什么就是在这个重定向的页面上,在回发时,我无法获得控件的值。因此,例如,当我在RadioButtonList中选择一个值(autopostback设置为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”,这是前一个值。
答案 0 :(得分:0)
如果必须根据UI控件值更改GridView上的结果
如果没有,请解释您何时想要刷新GridView
谢谢
答案 1 :(得分:0)
我对此没有回应。我已经修改了我的代码以使用ViewState,而不是重定向到同一页面,一切都按需要工作。仍然希望学到新的东西。感谢所有观看此主题的人。