我对MVC 3很新。
我知道如何将强类型对象从Controller发送到View。我现在拥有的是一个包含由该数据组成的表/表格的视图。
用户可以在该视图(html页面)中更改该数据。
当他们点击“保存”时,如何将数据从View发送回Controller,以便我可以更新我的数据库。
我是否重载Controller方法以使其接受模型类型的参数?能否请您提供一些源代码。
(请不要显示将数据保存到数据库的代码,我知道该如何做到这一点。)
非常感谢你帮助我。
我也更喜欢使用@Html.BeginForm()
答案 0 :(得分:9)
我喜欢为我的帖子数据创建一个动作方法。所以假设你有一个UserViewModel:
public class UserViewModel
{
public int Id { get; set; }
public string Name { get; set; }
}
然后是UserController:
public class UserController
{
[HttpGet]
public ActionResult Edit(int id)
{
// Create your UserViewModel with the passed in Id. Get stuff from the db, etc...
var userViewModel = new UserViewModel();
// ...
return View(userViewModel);
}
[HttpPost]
public ActionResult Edit(UserViewModel userViewModel)
{
// This is the post method. MVC will bind the data from your
// view's form and put that data in the UserViewModel that is sent
// to this method.
// Validate the data and save to the database.
// Redirect to where the user needs to be.
}
}
我假设您的视图中已有表单。您需要确保表单将数据发布到正确的操作方法。在我的示例中,您将创建如下表单:
@model UserViewModel
@using (Html.BeginForm("Edit", "User", FormMethod.Post))
{
@Html.TextBoxFor(m => m.Name)
@Html.HiddenFor(m => m.Id)
}
所有这一切的关键是MVC所做的模型绑定。使用HTML帮助程序,比如我使用的Html.TextBoxFor。另外,您会注意到我添加的视图代码的顶行。 @model告诉视图你将发送一个UserViewModel。让发动机为你工作。
编辑:好的电话,在记事本中完成了所有操作,忘记了Id的HiddenFor!
答案 1 :(得分:1)
在MVC中,从POST或GET HttpRequests中删除数据的行为称为模型绑定 - 有很多SO questions与此相关。
开箱即用,MVC将根据约定绑定您的Get和Post变量,例如名称为“FormName”的表单字段将绑定回控制器上具有相同名称的参数。
模型绑定也适用于对象 - MVC将为您的控制器实例化一个对象,并设置与您的表单同名的属性。