我有一个问题。我需要保存模型的所有值。
在index.cshtml中,我有:
@model IEnumerable
在我看来,我可以在foreach中获得所有的价值观。
@foreach(模型中的var项目){ item.ID,item.Name }
但是我需要通过一个链接将我的整个模型传递给我的控制器:
html.actionlink(“Save It”,Save,...);
我该怎么办呢?
由于
答案 0 :(得分:7)
您不能使用这样的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是模型集合的类型名称Item.cshtml
,则文件名应称为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" })