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