0

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

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

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

更新- 将视图模型上的属性更改为字符串没有区别。这是 mvc dropdownlistfor 的错误吗?我已经阅读了很多关于类似问题的帖子,但似乎找不到在这种情况下有效的解决方案。这就是我在代码中设置列表的方式:

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

其中 lineItem 被传递到此方法中

4

1 回答 1

0

不,选择的值属性不需要是字符串,可以是 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)

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

我通过下载 MVC 源代码,制作我自己的 DropDownListFor 副本(名为 MyDropDownListFor),然后单步执行代码以查看发生了什么。如果您在使用 MVC3 时仍然遇到问题,我建议您也这样做。您需要确定这是服务器代码的问题,还是您的 jquery 克隆内容的问题。

于 2012-05-03T13:24:56.793 回答