新选择后,主页面值中的下拉列表未更新

时间:2011-03-30 14:58:46

标签: c# asp.net drop-down-menu master-pages

我想帮助解决以下问题。我在我的母版页中实现了一个下拉列表。它有一个sql数据源,可以从中加载公司的值。根据所选的值(公司),它会在不同页面上的标签中显示该值。 主页中的ddl仍然可见,并且应该显示在第一次选择值时所执行的选定值。但是当我在ddl中选择另一个值时,它会显示第一个选择的值,依此类推。所以它没有更新或其他东西。 我的代码:

这是onselectedIndexChanged事件处理程序:

protected void DropDownListType_SelectedIndexChanged(object sender, EventArgs e)
    {           
        String input1 = DropDownListType.Text;
        String input2 = DropDownListType.SelectedValue;
        String url = "~/test.aspx?pcompany="+input1;

        DropDownListType.SelectedValue = input2;

        Session["Company"] = input2;

        Response.Redirect(url);

    }

这是我在主页的Page_load方法中使用的代码:

if (Session["Company"] != null)
{
    DropDownListType.SelectedValue = (String)Session["Company"];
}

如果我从page_load方法中删除最后一段代码,它会在重定向页面上使用值更新标签,但它会将我的ddl重置为默认值,而不是在选择值4时将其保持为4。

我希望大家都清楚这一点。任何帮助表示赞赏。 Ty提前。

3 个答案:

答案 0 :(得分:3)

尝试在PreRender()方法中设置标签值。您遇到的问题是页面生命周期。我会改变你的OnLoad方法来使用

if(!IsPostBack) {
    if (Session["Company"] != null) 
    {
        DropDownListType.SelectedValue = (String)Session["Company"];
    }
}

这样,您只需在页面加载时设置一次,然后页面将使用viewstate自动设置所选值。

答案 1 :(得分:0)

Load事件在SelectedIndexChanged事件之前被触发,这就是为什么你还没有在Session中设置它。

请参阅ASP.NET Page Life Cycle

答案 2 :(得分:0)

只需将DropDownList的AutoPostback属性设置为true,然后它就可以了。 这是因为否则只能在按钮或任何其他字段的PostBack上调用onselectedIndexChanged。 而且,正如上面的答案所说,使用此代码:

if(!IsPostBack) {
    if (Session["Company"] != null)
    {
        DropDownListType.SelectedValue = (String)Session["Company"];
    }
}