Asp.net mvc 3 MVC3 DropDownList用于未设置选定属性

Asp.net mvc 3 MVC3 DropDownList用于未设置选定属性,asp.net-mvc-3,razor,drop-down-menu,Asp.net Mvc 3,Razor,Drop Down Menu,在MVC3中,使用DropDownListFor时,第一个参数是否必须是字符串?我有以下设置: @Html.DropDownListFor(m => m.MyListItemId, Model.MyListItems, new Dictionary<string, object> { { "style", "width:120px" }, { "data-type", "myList" } }) 如果将line

在MVC3中,使用DropDownListFor时,第一个参数是否必须是字符串?我有以下设置:

@Html.DropDownListFor(m => m.MyListItemId, Model.MyListItems, 
    new Dictionary<string, object> 
    { 
        { "style", "width:120px" }, 
        { "data-type", "myList" } 
    })

如果将lineItem传递到此方法中

否,则selected value属性不需要是字符串,它可以是int。只要该值可转换为字符串,它就可以工作(因此,所选值类型可以是Guid、int、bool等)

当页面的路由具有与选定值模型属性同名的路由参数时,有时会发现问题。例如,考虑这一点:

route: "/establishments/{establishmentId}/edit"
型号:

public class MyViewModel
{
    public int EstablishmentId { get; set; }
    public SelectListItem[] Establishments { get; set; }
}
视图:

使用此代码,下拉列表的选定值将始终是路由中的任何establishmentId。因此,如果路线为/Establisions/12/edit,则在下拉列表中选择值12。管线参数和模型属性大小写不匹配并不重要


我通过下载MVC源代码,制作自己的DropDownListFor(名为MyDropDownListFor)副本,然后逐步查看代码以了解发生了什么。如果MVC3仍然有问题,我建议您也这样做。您需要弄清楚这是服务器代码的问题,还是jquery克隆的问题。

不确定我是否误解了您的问题;但是,如果要使用jQuery clone克隆选择列表,则需要重新选择该选项,请参阅问题和。谢谢!我不知道!这可能有助于克隆,我现在就试试。我仍然很好奇,为什么当选择一个新项目时,下拉列表选择值在呈现的html中没有改变?这不是我真正想要的。我可以复制上一行中的选定值,但主要问题是最近选定的值没有标记为selected这是个好主意,我下载了mvc代码,添加到selectlist extensions类中,它依赖于mvc资源,我得到了一个编译错误,无法访问内部类…我如何将其设置为一个状态,以便调试它?它有几个引用,您可以用任何东西替换它们以使其编译。例如,除了例外,我只是用自己的字符串替换了资源调用。您必须复制一些内部类和方法。但相信我,真正理解这些html助手在应用程序代码上下文中的工作方式是值得的。谢谢!我调试过,但没有发现任何有用的东西。当我选择一个新项目时,呈现的html中的选定项目仍然保持为上一个项目。。。
public class MyViewModel
{
    public int EstablishmentId { get; set; }
    public SelectListItem[] Establishments { get; set; }
}
@Html.DropDownListFor(m => m.EstablishmentId, Model.Establishments)