6

我对 MVC 3 很陌生。

我知道如何将强类型对象从控制器发送到视图。我现在拥有的是一个视图,其中包含一个由该数据组成的表/表单。

用户可以在该视图(html 页面)中更改该数据。

当他们单击“保存”时,我如何将数据从视图发送回控制器,以便我可以更新我的数据库。

我是否重载了 Controller 方法以使其接受模型类型的参数?能否请您提供一些源代码。

(请不要显示将数据持久化到数据库的代码,我知道该怎么做)。

非常感谢你帮助我。

我也更喜欢使用@Html.BeginForm()

4

2 回答 2

9

我喜欢为我的帖子数据创建一个操作方法。因此,假设您有一个 UserViewModel:

public class UserViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

然后是一个用户控制器:

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!

于 2012-08-29T15:30:16.383 回答
1

在 MVC 中,从 POST 或 GET HttpRequests 中提取数据的行为被称为模型绑定——有很多与此相关的SO 问题

开箱即用,MVC 将根据约定绑定您的 Get 和 Post 变量,例如,名称为“FormName”的表单字段将绑定回控制器上具有相同名称的参数。

模型绑定也适用于对象 - MVC 将为您的控制器实例化一个对象,并设置与您的表单同名的属性。

于 2012-08-29T15:26:18.410 回答