您无法使用这样的 GET 请求传递整个模型。您可以使用 HTML 表单:
@using (Html.BeginForm("Save", "SomeController"))
{
@Html.EditorForModel()
<input type="submit" value="Save It">
}
您已为此模型定义了编辑器模板(~/Views/Shared/EditorTemplates/Item.cshtml
) 使用隐藏字段:
@model Item
@Html.HiddenFor(x => x.ID)
@Html.HiddenFor(x => x.Name)
该部分的名称和位置很重要。它应该位于~/Views/Shared/EditorTemplates
文件名应该被称为Item.cshtml
如果 Item 是模型集合的类型名称,即IEnumerable<Item>
。将为集合中的每个项目执行编辑器模板,并呈现相应的隐藏字段,以便将其传输到服务器。
此表单将成功地将项目集合发送到以下控制器操作:
[HttpPost]
public ActionResult(IEnumerable<Item> model)
{
...
}
这是另一种继续进行的方法。如果用户不应该修改视图上的模型值,那么您可以简单地使用一些唯一标识符,允许您从最初获取模型的位置重新获取模型。例如:
public ActionResult Index(int id)
{
IEnumerable<Item> model = ... fetch the model using the id
return View(model);
}
并在视图中生成一个传递此 id 的链接:
@Html.ActionLink("Save It", Save, new { id = "123" })