从视图中检索整个模型

时间:2015-08-20 23:16:58

标签: c# html asp.net-mvc razor

我有一个ASP.NET MVC项目,我正在使用模型类。我有大约10个变量需要从控制器到视图然后再返回控制器。目前,我一直将它们存储在模型中,将变量读入隐藏的输入字段,然后使用NameValueCollection这样:

HTML:

<input type="hidden" id="field1" name="field1" value="@Model.variable1" />
<input type="hidden" id="field2" name="field2" value="@Model.variable2" />
<input type="hidden" id="field3" name="field3" value="@Model.variable3" />
<input type="hidden" id="field4" name="field4" value="@Model.variable4" />
<input type="hidden" id="field5" name="field5" value="@Model.variable5" />
<input type="hidden" id="field6" name="field6" value="@Model.variable6" />

C#

System.Collections.Specialized.NameValueCollection nvc = Request.Form;
model.variable1= int.Parse(nvc["field1"]); 
//read the rest of the data into the model

注意:为简单起见,valuesname已经过编辑

有更好的方法吗?理想情况下,我想将整个模型传递给我的控制器,但我找到了一个没有成功的解决方案。

1 个答案:

答案 0 :(得分:4)

无需手动编写html输入代码或直接从Request.Form对象解析数据。 MVC框架为您完成所有内容。

public class MyModel 
{
    public string Variable1 {get;set;}
    public string Variable2 {get;set;}
    //....

}

查看:

For结尾的这些方法的特殊之处在于,当您指定模型的属性时,他们将使用构建您具有正确的id和name属性的html输入。

@model MyModel
@Html.HiddenFor(x=> x.Variable1)
@Html.HiddenFor(x=> x.Variable2)
//...

控制器操作:

[HttpGet]
public ActionResult SomeAction()
{
     var model = new MyModel();
     model.Variabl1 = "hi";

     return View(model);
}

[HttpPost]
public ActionResult SomeAction(MyModel model)
{
    model.Variable1
}

您还可以发送自定义对象列表并在发回时保留它们,但这样做有点复杂,并且超出了此答案的范围。