MVC4将所有表单数据(模型)从javascript传递到控制器 - 这是可能的

MVC4 passing all form data (model) from javascript to controller -- is it possible?

本文关键字:控制器 javascript 表单 数据 模型 MVC4      更新时间:2023-09-26

回复

MVC3 使用 JavaScript 将模型视图传递给控制器

这意味着这是不可能的,至少对于 MVC 3 来说是这样。

我想知道 MVC 4 中是否有任何方法可以将整个表单内容(由模型表示)从 .cshtml(剃刀)视图快速传递到 JavaScript 中的控制器。

例如,如果我选择一个下拉列表,我可能希望将窗体中的所有字段返回到控制器,控制器将采取适当的操作。

显然,对于大型形式,不希望必须逐个元素地执行此操作

基本上,你可以调用 AJAX POST 来做到这一点:

JS(使用 jQuery):

$('form').on('submit', function (event) {
    // Stop the default submission
    event.preventDefault();
    // Serialize (JSON) the form's contents and post it to your action
    $.post('YourAction', $(this).serialize(), function (data) {
        // If you want to do something after the post
    });
});

控制器操作:

public ActionResult YourAction(string JSONmodel)
{
    System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    MyModel model = serializer.Deserialize(JSONmodel, typeof(MyModel));
    // Now you can do whatever you want with your model
}

更新

对于更复杂的对象,可以使用第三部分解决方案进行序列化/反序列化。它有很好的文档记录并扩大了使用范围:

Json.NET:http://json.codeplex.com/

是的,以更简单的方式是可能的。

  1. MelanciUK提供的示例的替代。

    $('form').on('submit', function (event) {
        // Stop the default submission
           event.preventDefault();
       // User same property name as in Model
          $.post('YourAction', {prop1 : 'a', prop2 : 'b'}, function (data) {
       // If you want to do something after the post
    });
    

    });

    [HttpPost]
     public ActionResult SampleAction(SampleModel sModel)
      {
      }
    

您可以通过stadard MVC(ModelBinding)约定实现相同的目标,即无需序列化和反序列化。