-2

我今天大部分时间都在试图解决这个问题,我很兴奋,所以任何见解都将不胜感激。我有一个 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”,这是以前的值。

4

2 回答 2

0

如果您必须根据 UI 控件值更改 GridView 上的结果

  • 您应该使用 UI 上的事件更改 GridView 的“DataSource”属性
  • 检查控件的“EnableViewState”

如果没有,请说明您何时要刷新 GridView

谢谢

于 2012-04-28T05:24:37.933 回答
0

我没有得到任何回应。从那以后,我修改了我的代码以使用 ViewState 而不是重定向到同一页面,并且一切都按需要工作。仍然希望学习新的东西。感谢所有查看此主题的人。

于 2012-05-14T18:46:29.593 回答