使用其他路由参数提交实体集合

时间:2013-03-29 10:46:22

标签: c# asp.net-mvc binding

我有一个强类型视图

@model IEnumerable<MagazineIndex>

表示用户输入的对象数组。我也有一个下拉列表:

@Html.DropDownList("DropDownName",
                   (List<SelectListItem>)ViewData["magazines"],
                   new { id = "DropDownName" })

当我提交表单时,我收到此错误:

  

没有类型为'IEnumerable'的ViewData项具有键'DropDownName'。

我的控制器是这样的:

public ActionResult CreateContent(IList<MagazineIndex> indexes,
                                  string DropDownName)

我如何更正绑定值?

1 个答案:

答案 0 :(得分:1)

请确保在您的HttpPost操作中填充ViewData["magazines"]的方式与您在Get操作中的方式相同:

[HttpPost]
public ActionResult CreateContent(IList<MagazineIndex> indexes, string DropDownName)
{
    ...
    ViewData["magazines"] = ... same stuff as in your GET action
    return View(indexes);
}

如果您打算在POST操作中重新显示相同的视图,则只需执行此操作。如果您重定向,则不需要它。你需要它的原因是显而易见的。您的视图需要呈现DropDown控件,该控件取决于其值。