Asp.net 回发后还原下拉选择的项目

Asp.net 回发后还原下拉选择的项目,asp.net,postback,viewstate,autopostback,selectedindexchanged,Asp.net,Postback,Viewstate,Autopostback,Selectedindexchanged,当下拉列表中的某个项目被选中时,我正在尝试刷新页面 DropDownList从不获取最后一个选定的项目,它始终还原保存在ViewState中的项目。ViewState不想记住新东西,它总是保存一个相同的信息 默认ASPX页面 <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Experi

当下拉列表中的某个项目被选中时,我正在尝试刷新页面

DropDownList从不获取最后一个选定的项目,它始终还原保存在ViewState中的项目。ViewState不想记住新东西,它总是保存一个相同的信息

默认ASPX页面

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ExperimentalPage.aspx.cs" 
Inherits="ExperimentalPage" Title="Enperimental Page" EnableViewState="True" %>

<asp:Content ID="ExperimentalLeftPane" ContentPlaceHolderID="cph_LeftPane" Runat="Server">  
    <div style="position: absolute; left: 0px; top: 35px; width: 250px;">
        <asp:DropDownList ID="dd1" runat="server" OnSelectedIndexChanged="RefreshPage" AutoPostBack="True" CssClass="class_DropDown" Style="width: 250px; margin-bottom: 3px;"/>
    </div>
</asp:Content>
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        dd1.Items.Insert(0, "dd1-0");
        dd1.Items[0].Value = "0";
        dd1.Items.Insert(1, "dd1-1");
        dd1.Items[1].Value = "1";
        dd1.Items.Insert(2, "dd1-2");
        dd1.Items[2].Value = "2";
    }
    else        
    {
        dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByValue(Convert.ToString(Request.QueryString["dd1"])));
    }
}

protected void RefreshPage(object o, EventArgs e)
{
    Page.Response.Redirect("ExperimentalPage.aspx?"
    + "&dd1=" + dd1.SelectedValue);
}
问题部分解决


查看我的答案

当您从下拉列表中选择一个项目时,您将在
刷新页面()方法之前点击
页面加载()

这意味着您将在RefreshPage方法之前执行此行:

dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByValue(Convert.ToString(Request.QueryString["dd1"])));
Convert.ToString(Request.QueryString[“dd1”])的计算结果将为null,因此SelectedIndex将设置为0

如果您想实现这一目标,应尝试以下方法:

if (!Page.IsPostBack)
{
    dd1.Items.Insert(0, "dd1-0");
    dd1.Items[0].Value = "0";
    dd1.Items.Insert(1, "dd1-1");
    dd1.Items[1].Value = "1";
    dd1.Items.Insert(2, "dd1-2");
    dd1.Items[2].Value = "2";

    if (!string.IsNullOrEmpty(Request.QueryString["dd1"]))
    {
        dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByValue(Convert.ToString(Request.QueryString["dd1"])));
    }
}

好的,我已经知道如何修复它了。如果有人需要,这就是解决办法

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        dd1.Items.Insert(0, "dd1-0");
        dd1.Items[0].Value = "0";
        dd1.Items.Insert(1, "dd1-1");
        dd1.Items[1].Value = "1";
        dd1.Items.Insert(2, "dd1-2");
        dd1.Items[2].Value = "2";
    }       
}

protected void RefreshPage(object o, EventArgs e)
{
    Session["dd1"] = dd1.SelectedValue;     
    dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByValue(Convert.ToString(Session["dd1"])));
}
在此解决方案中,EnableViewState页面属性为True
没有页面重定向。未使用查询字符串。而是使用会话变量。这是一种在回发期间保留值的好方法。

如何调用RefreshPage函数?