我使用的是带有自定义视图模型的强类型视图。此视图模型包含一组书籍。
public IList<Books> Books { get; private set; }
我还将一个选择列表传递给视图。但是,DropDownListFor
助手类不会自动预选图书的默认值。
@Html.DropDownListFor(m => Model.Books[i].AuthorID, Model.Author as SelectList)
其他一切都可以工作,例如,它确实将选定的值传递给控制器。
通过在视图模型中创建选择列表,我找到了一个解决办法:
@Html.DropDownListFor(m => Model.Books[i].AuthorID, new SelectList(Model.AuthorList, "Value", "Text", @Model.Books[i].AuthorID.ToString()))
但是,如果有更简单的解决方案,我不希望实现这个解决方案。视图是否可以处理集合中的值?
发布于 2011-03-28 07:31:01
您应该将作者列表作为模型的一部分传递,就像您在解决问题时所做的那样。您可以在控制器中生成选择列表,但是不需要在视图中创建列表。类似于:
@Html.DropDownListFor(m => Model.Books[i].AuthorID, Model.AuthorList)
如果在控制器中创建列表,则此操作将有效:
var model = new ViewModel()
{
AuthorList = new SelectList(Model.AuthorList, "Value", "Text"),
};
并且它将自己处理所选项目的设置。
至于为什么您的Model.Author as SelectList
不能工作,我猜Model.Author不是一个作者姓名和ID的列表。它可能是一个域对象,并且使用as
进行转换将返回null。
https://stackoverflow.com/questions/5458717
复制相似问题