代码之家  ›  专栏  ›  技术社区  ›  Veli Gebrev

ASP.NET MVC:SelectList忽略构造函数中的SelectedValue参数

  •  0
  • Veli Gebrev  · 技术社区  · 14 年前

    我的观点如下:

    <%= Html.DropDownList("Schema.MetaData.SourceTableName", new SelectList(Model.Schema.MetaData.SourceTableNames, Model.Schema.MetaData.SourceTableName), Model.SourceTablesOptionLabel)%>
    

    SourceTableNames的类型为 List<string>

    当我填充模型时,我在视图模型上使用以下方法为sourceTableName分配值:

    public void SetDefaultSourceTable(string mostLikelyCandidate)
    {
        Debug.Assert(this.Schema.MetaData.SourceTableNames.Contains(mostLikelyCandidate));
        this.Schema.MetaData.SourceTableName = mostLikelyCandidate;
    }
    

    (以下简称 Debug.Assert 演示我传入的内容是sourceTableNames列表的一部分)

    不幸的是,无论我传递给那个方法什么,即使所有的属性都是正确的,即使我在视图本身中放置了一个断点,第一个选项总是被选中的

    <SELECT id=Schema_MetaData_SourceTableName name=Schema.MetaData.SourceTableName>
      <OPTION selected>Table A</OPTION> 
      <OPTION>Table B</OPTION> 
      <OPTION>Table C</OPTION>
    </SELECT> 
    

    有我做错什么的线索吗?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Jimmy    14 年前

    为什么不在自定义视图模型中构造selectlist,并从视图本身中拉入它呢?

    AKA:

    SelectList RolesList = new SelectList(roles, "RoleID", "RoleName", user.RoleID);
    
    <%= Html.DropDownList("RoleID", Model.RolesList, "Select a Role...", new { @class = "required" }) %>
    

    编辑:角色是一个iQuery对象,只是一个具有roleid、rolename列的Linq对象。

    其中roleid是关联所选值的键,user.roleid是要选择的值。

    这在我的一些MVC应用程序中有效

        2
  •  0
  •   Veli Gebrev    14 年前

    嘿,谢谢你的评论和建议,并为延迟的反馈道歉。

    似乎DropDownList扩展方法重载 optionLabel 参数是罪魁祸首。

    如果我把它拿出来( Model.SourceTablesOptionLabel )将按预期选择正确的项,无论选择列表的创建方式和位置以及如何设置其选定值。

    我可能应该看看ASP.NET MVC源代码,看看到底发生了什么以及为什么会发生这种情况,但是现在我的最后期限太紧了,不能花更多的时间来做这件事:)