4

I'm trying to refresh page when an item of the drop down list is selected.

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>

默认 ASPX.CS 代码隐藏页面

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);
}

问题部分解决

看我的回答

4

2 回答 2

2

好的,我已经意识到如何解决它。如果有人需要,这就是解决方案。

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。没有页面重定向。不使用查询字符串。相反,使用Session变量。这是在回发期间保持值的好方法。

于 2013-07-04T16:16:29.770 回答
1

当您从下拉列表中选择一个项目时,您将点击方法Page_Load()之前的RefreshPage()

这意味着您将在 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"])));
    }
}
于 2013-07-04T08:02:29.773 回答