如何在MVC中使用Javascript / AJAX将整个对象传递给控制器​​?

时间:2012-04-06 01:39:38

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

我正试图找出一种方法将整个类从我的View传递给使用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()
        });

这会有用吗?怎么安全?什么是最好的方式?

4 个答案:

答案 0 :(得分:4)

查看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填充方法。

答案 1 :(得分:2)

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

查看:

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

控制器:

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

答案 2 :(得分:2)

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

MVC模型绑定将保留剩余的东西

答案 3 :(得分:1)

尝试使用serialize(jQuery)

例如

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