1

我试图找出一种方法将整个类从我的视图传递到带有 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

4 回答 4

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 的方法。

于 2012-04-06T02:20:59.380 回答
2

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

看法:

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

控制器:

var myModel = TempData["myModel"];
TempData.Remove("myModel");
于 2012-04-06T01:42:46.107 回答
2

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

MVC 模型绑定将处理剩余的事情

于 2012-04-06T01:44:47.990 回答
1

尝试使用序列化(jQuery)

例如。

$.ajax({
   type: "POST",
   url: "\User\",
   data: $(form).serialize(),
   success: reloadPage()
});
于 2014-05-15T23:44:16.663 回答