我有一个MVC 3项目,我正在使用c#和Razor开始。我有一个页面,有大约20个输入字段将被使用。我创建了我的ViewModel以将数据传递给View以创建页面。当用户提交表单时,我对如何获取字段的值感到困惑。
我的控制器是否必须为我页面上的每个输入字段都有一个参数?有没有办法让Controller获取页面上的所有数据,然后我可以解析它?参数列表很大。
答案 0 :(得分:3)
您可以使用传递给视图的相同模型作为后续操作中的参数。
一个例子:
//This is your initial HTTP GET request.
public ActionResult SomeAction() {
MyViewModel model;
model = new MyViewModel();
//Populate the good stuff here.
return View(model);
}
//Here is your HTTP POST request; notice both actions use the same model.
[HttpPost]
public ActionResult SomeAction(MyViewModel model) {
//Do something with the data in the model object.
}
第二种方法中的模型对象将自动从HTTP请求中包含的数据中填充(技术名称为“模型绑定”)。
答案 1 :(得分:2)
在控制器的操作中,期望收到您传回视图的相同“模型”。如果您正确生成了“输入控件”(使用Html.TextBoxFor()
或将Name
属性设置为模型属性的相同名称),这将有效。
public ActionResult MyAction(MyViewModel model)
{
...
}
注意MVC将使用ModelBinder来确定如何根据用户提交的字段创建和填充您的操作所期望的对象的属性。
如果您想捕获用户的所有输入,您可以采取行动接收FormCollection
类型的对象:
public ActionResult MyAction(FormCollection values)
{
...
}
答案 2 :(得分:0)
请在控制器中创建一个mvc动作,并将模型作为参数
Like this:
[HttpPost] or [HttpGet]
public ActionResult Employee(EmployeeModel employee)
{
// now you will have all the input inside you model properties
//Model binding is doen autoamtically for you
}