【问题标题】:How to pass an entire object to a controller with Javasctipt / AJAX in MVC?如何在 MVC 中使用 Javascript/AJAX 将整个对象传递给控制器​​?
【发布时间】:2012-04-19 18:15:09
【问题描述】:

我正在尝试找出一种方法,将整个类从我的视图传递到使用 Javascript/AJAX 的控制器。

我知道下面的 Ajax 代码可以用来只传递 ID,但我可以传递整个模型吗?

    @model  User
    $.ajax(
        {
            type: "POST",
            url: "\User\",
            data: @model.id,
            success:
                reloadPage()
        });

我在搜索时看到了以下解决方案: Is there a way to pass a "C#" object to a controller via AJAX?

我可以简单地这样做吗? :

    @model  User
    $.ajax(
        {
            type: "POST",
            url: "\User\",
            data: @model,
            success:
                reloadPage()
        });

这行得通吗?有多安全?最好的方法是什么?

【问题讨论】:

    标签: c# javascript jquery ajax model-view-controller


    【解决方案1】:

    虽然不是最佳实践,但如果没有其他方法可以获取此数据,那么您可以通过 tempdata 传递数据

    查看:

    @{
     TempData["myModel"] = Model;
    }
    

    控制器:

    var myModel = TempData["myModel"];
    TempData.Remove("myModel");
    

    【讨论】:

      【解决方案2】:

      创建一个与原始对象具有相同属性的 Json 对象,将 Json 对象名称作为控制器参数名称。 使用 AJAX 请求将 Json 对象传递给 Controller

      MVC 模型绑定会处理剩下的事情

      【讨论】:

      • 那么当 User 对象最初传递给视图模型时,它需要是 JSON 类型吗?在接收端,一旦我将它从视图进一步发送到具有此逻辑的下一个控制器,该怎么办?框架会自动将其从 JSON 解析回 User 类型吗?
      • 一次检查这个问题的答案link
      • 好吧,看来在 MVC3 JSON 到类模型绑定之前必须手动处理。现在使用 MVC3,它会自动处理。在我关闭它之前快速提问。当我已经在使用视图时,是否可以将我的模型转换为 JSON?或者只是模型必须是 JSON 类型才能成为视图模型?
      【解决方案3】:

      查看JavascriptSerializer.Serialize() 方法。所以是这样的:

      @model  User
      $.ajax({
          type: "POST",
          url: "\User\",
          data: JSON.parse(@(new JavascriptSerializer().Serialize(Model))),
          success: reloadPage
      });
      

      本质上,这会将您的模型序列化为 JSON 字符串,然后将其在客户端解析回 JS 对象,然后将其传递给 AJAX 请求。当请求到达服务器时,MVC 模型绑定处理基于 JSON 对象构造模型的实例。

      请注意,旧版本的 IE 不支持 JSON.parse。您可以获取json2.js 为 IE 填充该方法。

      【讨论】:

      • 谢谢。这是稍后查看的人的命名空间:System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model)
      • 但这不只是序列化页面加载时的内容,而不是视图中创建/更新的模型吗?
      • 大小写错误,类名为 JavaScriptSerializer,Script 上大写 S。 (不是 JavascriptSerializer)
      【解决方案4】:

      尝试使用序列化(jQuery)

      例如。

      $.ajax({
         type: "POST",
         url: "\User\",
         data: $(form).serialize(),
         success: reloadPage()
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        • 2018-05-02
        • 2019-02-16
        相关资源
        最近更新 更多