还原一个下拉回发后所选项目 [英] Restore a drop down selected item after postback

查看:127
本文介绍了还原一个下拉回发后所选项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

总IDEA

我试图做一个很简单的事情 - 当选择下拉列表中的项目刷新页面。将DropDownList的选择项被传递到查询字符串作为参数。页面重新加载。然后,参数从查询字符串,并采取了用于恢复下拉列表中选择。参数保持选定项目的值。

I'm trying to do a very simple thing - refresh page when an item of the drop down list is selected. Selected item of the dropdownlist is passed to the query string as a parameter. Page reloads. Then parameter is taken from query string and used to restore selection of the drop down list. Parameter keeps the value of the selected item.

问题

真正选择的值不会传递到查询字符串参数,它总是0。 DropDownList中从来没有得到最后选定的项目,它始终恢复它保存在ViewState中的之一。 ViewState中不希望记住新的东西,它总是保持一个相同的信息。我一直试图找到个解决方案。在一些网页上它的工作原理,但在大多数情况下并非如此。如果它在我的web应用程序工作的地方,我完全不知道为什么,并希望它继续第二天的工作。有时候,它只是停止工作,我无法修复它。

Real selected value is not passed to the query string parameter, it's always "0". DropDownList never gets last selected item, it always restores the one which is saved in ViewState. ViewState doesn't want to remember new stuff, it always keeps one and the same info. I've been trying to find the solution for months. On some pages it works, but in most cases it doesn't. If it worked somewhere in my web app, I completely had no idea why and hoped it would continue working the next day. Sometimes it just stopped working and I wasn't able to fix it.

默认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 code隐藏页

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

的尝试,使其工作

方案1的EnableViewState =真

我选择的DropDownList的第三个项目(具有值2),页面重新加载。查询字符串永远没有价值2。它总是0。第一项回发后始终处于选中状态,也许是因为ViewState中,这将重置它。

I select third item (with value "2") of the dropdownlist, page reloads. Query string never takes the value "2". It always "0". The first item is always selected after postback, maybe because of ViewState, which resets it.

方案2的EnableViewState =FALSE

选择的值不会被保存。 DropDownList的完全是空的回发后。

Selected value is not saved. DropDownList is completely empty after postback.

场景3的EnableViewState =假。 DROPDOWNLIST充满在每个页面加载数据。回发检查仅用于检索选定的值:

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      
    if (Page.IsPostBack)
    {
        dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByValue(Convert.ToString(Request.QueryString["dd1"])));
    }
}

在这种情况下,选择的值永远不会保存到查询字符串和下拉式选择的项目是永远不会恢复。

In this case selected value is never saved to query string and dropdown selected item is never restored.

一个大问题

什么我错过和如何使它保持选定的值,并回传后恢复?

What do I miss and how to make it keep the selected value and restore it after postback?

问题部分解决

见我的答案

推荐答案

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

Ok, I have realized how to fix it. If anybody needs it, this is the solution.

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 页属性的
没有页面重定向。不使用查询字符串。相反,会议变量使用。这回发过程中保持价值的好办法。

In this solution EnableViewState page property is True. There is no Page redirection. Query string is not used. Instead, Session variable is used. This is a good way to keep values during postback.

这篇关于还原一个下拉回发后所选项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆