如何在MVC中使用Javasctipt/AAJAX将整个对象传递给控制器

How to pass an entire object to a controller with Javasctipt / AJAX in MVC?

本文关键字:对象 控制器 AAJAX MVC Javasctipt      更新时间:2023-09-26

我正试图找到一种方法,用Javascript/AAJAX将整个类从View传递给Controller。

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

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

我在搜索时看到以下解决方案:有没有办法通过";C#";对象通过AJAX连接到控制器?

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

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

这行得通吗?安全性如何?最好的方法是什么?

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

虽然不是最佳实践,但如果没有其他方法可以获得这些数据,则可以通过tempdata 传递数据

视图:

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

控制器:

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

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

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

尝试使用序列化程序(jQuery)

例如。

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