DropDownLists可能是我最不喜欢使用MVC框架的部分。我的表单中有几个下拉列表,我需要将选定的值传递给接受模型作为其参数的ActionResult。MVC DropDownList值发布到模型没有绑定
的标记看起来是这样的:
<div class="editor-label">
@Html.LabelFor(model => model.FileType)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.FileType.Variety, (SelectList)ViewBag.FileTypes)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Status)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Status.Status, (SelectList)ViewBag.Status)
</div>
我的控制器操作是这样的:
[HttpPost]
public ActionResult Create(int reviewid, ReviewedFile file)
{
if (ModelState.IsValid)
{
UpdateModel(file);
}
//repository.Add(file);
return RedirectToAction("Files", "Reviews", new { reviewid = reviewid, id = file.ReviewedFileId });
}
这应该是所有好,除了从下拉菜单中的值好被张贴空值。当我深入了解一下的ModelState错误,原因是发现:
从类型 “System.String”输入 “PeerCodeReview.Models.OutcomeStatus” 参数转换失败,因为没有类型转换器可 在这些类型之间进行转换。
它不应该这么难,但它是。所以问题是,我需要做什么才能正确地绑定我的模型属性?另外,我知道我可以传递一个FormCollection对象,但这意味着要更改当前期望强类型模型参数的单元测试的重要部分。
此外,你不需要说的UpdateModel(文件)在那里,张贴表单值已经包含在你的'ReviewedFile file'参数。 – 2011-04-14 03:10:32
我只是需要它来检查ModelState错误。一旦我弄清楚如何排除问题,我们就会去做。 – 2011-04-14 04:18:48