【问题标题】:Dropdownlist in masterpage value not updated after new selected新选择后母版页值中的下拉列表未更新
【发布时间】:2023-03-20 15:25:01
【问题描述】:

我需要一些帮助来解决以下问题。我在我的母版页中实现了一个下拉列表。它有一个 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。

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答。我很惊讶我自己还没有尝试过。 ;)
【解决方案2】:

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

ASP.NET Page Life Cycle

【讨论】:

    【解决方案3】:

    只需将 DropDownList 的 AutoPostback 属性设置为 true 即可。 这是因为否则 onselectedIndexChanged 将仅在 PostBack 从按钮或任何其他字段中调用。 而且,正如上面的答案所说,使用这个代码:

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

    【讨论】:

    • 这不是他遇到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多