【问题标题】:ASP.NET DropDownList SelectedValue property not being set immediately未立即设置 ASP.NET DropDownList SelectedValue 属性
【发布时间】:2009-06-18 14:12:21
【问题描述】:

我有一个 ASP.NET 网络表单,我在其上使用 DropDownList 控件来允许用户选择一个项目并查看相关结果。由于某种原因,当我设置 DropDownList 的 SelectedValue 属性时,它设置的值不会立即可用。

这是我的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DropDownList1.SelectedValue = "5";
        BindView();
    }
}

protected void BindActivities()
{
    DataClassesDataContext dc = new DataClassesDataContext();
    var query = from activity in dc.Activities
                where activity.AssignedTo == Convert.ToInt32(DropDownList1.SelectedValue);
    GridView1.DataSource = query;
    GridView1.DataBind();
}

在前面的代码中,我收到一个错误,即 DropDownList1.SelectedValue 为空。奇怪的是,如果我注释掉使用 DropDownList1.SelectedValue 的代码并让页面加载,DropDownList1 实际上设置为值 5。所以它看起来设置正确,但不是立即可用。调试器确认 DropDownList.SelectedValue 没有在设置它的代码行之后立即设置为 5。

有什么想法吗?

【问题讨论】:

    标签: asp.net webforms drop-down-menu


    【解决方案1】:

    你是在绑定下拉列表之前设置值吗?

    【讨论】:

    • DropDownList 以声明方式绑定到 LinqDataSource 控件。我认为思想发生在 Page_Load 事件之前。对吗?
    • 除非你明确地调用它。
    • 我在设置 SelectedValue 之前立即添加了对 DropDownList1.DataBind() 的显式调用,它现在可以正常工作。
    • @MatthewJones 为什么声明式绑定没有帮助?我在 OnPreRender 方法中查找,它甚至没有绑定在那里,除非按照您的建议明确绑定。这很奇怪。
    【解决方案2】:

    是的,上面的用户是对的

    if (!Page.IsPostBack)
    {
        BindView();
        DropDownList1.SelectedValue = "5";
    }
    

    ...应该可以正常工作。

    没有执行的延迟,只有执行的顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多