【问题标题】:Restore a drop down selected item after postback回发后恢复下拉选定的项目
【发布时间】:2013-07-02 02:01:27
【问题描述】:

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

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

问题部分解决

看看我的回答

【问题讨论】:

  • 什么时候调用 RefreshPage 函数?

标签: asp.net postback viewstate autopostback selectedindexchanged


【解决方案1】:

好的,我已经知道如何解决它了。如果有人需要,这就是解决方案。

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 变量。这是在回发期间保持值的好方法。

【讨论】:

    【解决方案2】:

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

    这意味着您将在 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"])));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2018-03-03
      • 1970-01-01
      相关资源
      最近更新 更多