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