我正试图找出一种方法将整个类从我的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()
});
这会有用吗?怎么安全?什么是最好的方式?
答案 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()
});