我有一个使用 c# 和 Razor 开始的 MVC 3 项目。我有一个页面,将使用大约 20 个输入字段。我创建 ViewModel 以将数据传递给 View 以创建页面。当用户提交表单时,我对如何获取字段的值感到困惑。
我的控制器是否必须为页面上的每个输入字段都有一个参数?有什么方法可以让控制器获取页面上的所有数据,然后我可以解析它?参数列表会很大。
我有一个使用 c# 和 Razor 开始的 MVC 3 项目。我有一个页面,将使用大约 20 个输入字段。我创建 ViewModel 以将数据传递给 View 以创建页面。当用户提交表单时,我对如何获取字段的值感到困惑。
我的控制器是否必须为页面上的每个输入字段都有一个参数?有什么方法可以让控制器获取页面上的所有数据,然后我可以解析它?参数列表会很大。
您可以在后续操作中使用传递给视图的相同模型作为参数。
一个例子:
//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 请求中包含的数据填充(技术名称是“模型绑定”)。
在您的控制器的操作中,期望收到您传递回视图的相同“模型”。如果您正确生成了“输入控件”(通过使用Html.TextBoxFor()
或通过将属性设置为Name
模型属性的相同名称),这将起作用。
public ActionResult MyAction(MyViewModel model)
{
...
}
注意 MVC 将使用 ModelBinder 来确定如何根据用户提交的字段来创建和填充预期操作的对象的属性。
如果你想捕获用户的所有输入,你可以让你的动作接收一个类型的对象FormCollection
:
public ActionResult MyAction(FormCollection values)
{
...
}
请在您的控制器中创建一个 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
}