kmb*_*kmb 5 asp.net asp.net-mvc-3
我正在使用带有自定义视图模型的强类型视图.此视图模型包含一组书籍.
public IList<Books> Books { get; private set; }
Run Code Online (Sandbox Code Playgroud)
我也将一个选择列表传递给视图.但是,DropDownListFor
辅助类不会自动预先选择该书的默认值.
@Html.DropDownListFor(m => Model.Books[i].AuthorID, Model.Author as SelectList)
Run Code Online (Sandbox Code Playgroud)
其他一切都有效,例如它确实将所选值传递回控制器.
我通过在viewmodel中创建选择列表找到了一种解决方法:
@Html.DropDownListFor(m => Model.Books[i].AuthorID, new SelectList(Model.AuthorList, "Value", "Text", @Model.Books[i].AuthorID.ToString()))
Run Code Online (Sandbox Code Playgroud)
但是,如果有一个更简单的解决方案,我不想实现此解决方法.有没有办法让视图可以处理集合中的值?
您应该像解决方法中一样将作者列表作为模型的一部分传递。您可以在控制器中生成选择列表,但是,不需要在视图中创建列表。就像是:
@Html.DropDownListFor(m => Model.Books[i].AuthorID, Model.AuthorList)
Run Code Online (Sandbox Code Playgroud)
如果您在控制器中创建列表,这将起作用:
var model = new ViewModel()
{
AuthorList = new SelectList(Model.AuthorList, "Value", "Text"),
};
Run Code Online (Sandbox Code Playgroud)
并且它将自行处理设置所选项目。
至于为什么你的Model.Author as SelectList
不起作用,我猜 Model.Author 不是作者姓名和 ID 的列表。它可能是一个域对象,并且使用它进行强制转换as
将返回 null。
归档时间: |
|
查看次数: |
1650 次 |
最近记录: |