获取.net下拉以在页面加载后保持选定的值

时间:2014-05-02 14:35:48

标签: c# jquery asp.net

我现在已经开展了一年的计划,我现在仍然遇到第一天问题。我有一个从SQL数据源填充的下拉列表。我想要发生的是,当从列表中选择一个项目时,使用Response.Redirect重新加载同一页面,因为我的应用程序提取查询字符串数据以填充应用程序的其他部分。问题是,重定向下拉列表后显示列表中的第一个项目,而不是当前当前选择显示的项目。 1年后,仍然有noob问题。我用谷歌搜索它并且无法找到解决方案......任何想法

page 1
<div>


    <asp:DropDownList ID="ClientDD" runat="server" 
        AutoPostBack="True" 
        DataSourceID="ClientDDq" 
        DataTextField="CaseName"
        DataValueField="filetag"
        OnSelectedIndexChanged="ClientRD">  
    </asp:DropDownList>



    <asp:SqlDataSource ID="ClientDDq" runat="server" 
        ConnectionString="<%$ ConnectionStrings:craftConnectionString1 %>" 
        SelectCommand="SELECT * FROM [CaseFiles]">
    </asp:SqlDataSource>



</div>

第1.cs页

 protected void Page_Load(object sender, EventArgs e)
{




    if (!Page.IsPostBack)
    {
        ClientDD.DataBind();
        ClientDD.Items.FindByValue(ClientDD.SelectedValue).Selected = true;
        ClientDD.SelectedItem.Selected = true;
    }


}


protected void ClientRD(object sender, EventArgs e)
{
    Response.Redirect("sonic.aspx?foil=" + ClientDD.SelectedItem.Value, true);


}

}

一切正常,但下拉菜单重置。任何新的想法/样本都会有很大的帮助

感谢大卫

更新版本

第2页

if (!Page.IsPostBack)
    {
        ClientDD.DataBind();

        var selectedValue = Request.QueryString["foil"];
        if (!string.IsNullOrEmpty(selectedValue))
            ClientDD.Items.FindByValue(selectedValue).Selected = true;

    }


}

protected void ClientRD(object sender, EventArgs e)
{
    Response.Redirect("sonic.aspx?foil=" + ClientDD.SelectedItem.Value, true);


}

2 个答案:

答案 0 :(得分:3)

首先,您为什么要使用Response.Redirect重新加载页面?在处理回发后,页面自然会加载。

除此之外,Page_Load中没有代码可以捕获您在重定向中传递的查询字符串值。您需要捕获该值并实际设置所选元素。可能是这样的:

if (!Page.IsPostBack)
{
    ClientDD.DataBind();

    // really not sure what you're doing here.
    // if this isn't a post-back then there wouldn't *be* a selected value...
    ClientDD.Items.FindByValue(ClientDD.SelectedValue).Selected = true;
    ClientDD.SelectedItem.Selected = true;

    // select based on the query string
    var selectedValue = Request.QueryString["foil"];
    if (!string.IsNullOrEmpty(selectedValue))
        CliendDD.Items.FindByValue(selectedValue).Selected = true;
}

答案 1 :(得分:0)

而不是使用 ClientDD.SelectedItem.Selected=true;尝试设置ClientDD.SelectedIndex 所以像这样:

if (!Page.IsPostBack)
    {
        ClientDD.DataBind();
        var index = ClientDD.Items.IndexOf(ClientDD.Items.FindByValue(ClientDD.SelectedValue));
        ClientDD.SelectedItem = index;


        // select based on the query string
        selectedValue = Request.QueryString["foil"];
        if (!string.IsNullOrEmpty(selectedValue))
            var index = ClientDD.Items.IndexOf(ClientDD.Items.CliendDD.Items.FindByValue(selectedValue));
        ClientDD.SelectedItem = index;

}