MVC3 DropDownList不设置所选属性

时间:2012-05-03 09:01:58

标签: 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" } 
    })

其中m.MyId是我的viewmodel上的int。我遇到一个问题,当我在下拉列表中更改所选项目并检查呈现的html时,“selected”属性未设置为新选择的项目。这是一个问题,因为我正在使用jquery clone函数来复制该行,我需要将新选择项目的列表复制到我的新行。想法?

更新 - 将viewmodel上的属性更改为字符串没有任何区别。 这是mvc dropdownlistfor的错误吗?我已经阅读了很多关于类似问题的帖子,但似乎无法找到适用于此实例的解决方案。这就是我的代码中设置列表的方式:

var myListItems = _myRepository.GetAll();
model.MyListItems = new SelectList(myListItems, "Id", "Name", lineItem.myListItemId);
model.MyListItemId = lineItem.myListItemId;

其中lineItem传递给此方法

1 个答案:

答案 0 :(得分:0)

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

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

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

型号:

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

查看:

@Html.DropDownListFor(m => m.EstablishmentId, Model.Establishments)

使用此代码,下拉列表的选定值将始终是路由中的establishId。因此,如果路线是/ establishment / 12 / edit,那么将在下拉列表中选择值12。路由参数和模型属性大小写不匹配无关紧要。

我通过下载MVC源代码,制作我自己的DropDownListFor副本(名为MyDropDownListFor),然后单步调试代码来查看发生了什么来解决这个问题。如果您仍然遇到MVC3问题,我建议您也这样做。你需要弄清楚这是服务器代码还是你的jquery clone东西的问题。