【问题标题】:MVC sending data from View to ControllerMVC 将数据从 View 发送到 Controller
【发布时间】:2012-08-29 15:20:49
【问题描述】:

我对 MVC 3 很陌生。

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

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

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

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

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

非常感谢你帮助我。

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

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    我喜欢为我的帖子数据创建一个操作方法。所以假设你有一个 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!

    【讨论】:

    • +1 写的答案几乎相同。对于视图部分,您也可以使用 EditorForModel() 和 DataAnnotations 来控制输出,而不是手动设置每个可编辑属性。
    • 伟大的收获@nonnb!编辑了我的示例。
    • @James,我从未真正使用 EditorForModel 做过很多事情,而且我不确定他的网站有多复杂。不过建议很好。
    • 另外,这是一个很好的链接:msdn.microsoft.com/en-us/library/dd493063(v=vs.108) 输入助手是我用于输入字段的。
    • 非常非常非常非常非常感谢。你的帖子很有道理!我能够添加我的用户控件,将当前数据发送到表单控件,然后将它们发送回控制器。非常非常感谢你!完美的解释,写得很好,解释清楚....真棒。我爱你!我爱你!哇!
    【解决方案2】:

    在 MVC 中,从 POST 或 GET HttpRequests 中抓取数据的行为称为模型绑定 - 与此相关的 SO questions 很多。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多