【问题标题】:MVC Ajax GET method with JSON object as parameter以 JSON 对象为参数的 MVC Ajax GET 方法
【发布时间】:2016-02-14 04:08:47
【问题描述】:

我正在尝试向发送 Json 对象作为参数的操作发出 Ajax 请求。

这里是 Jquery 的代码:

var jsonObject = {
    "Id": 33,
    "Name": "TEST"
};

$.ajax({
    type: "GET",
    url: rootPath + "ScheduledEvents/Edit/",
    data: JSON.stringify(jsonObject),
    /*contentType: "application/json; charset=utf-8",*/
    dataType: "json",
    success: function (data) {
        $("#defaultModalRightEventContent").html(data);
        $("#defaultModalRightEvent").modal("show");
    },
    error: function (request, status, error) {
        alert(request.responseText);
    }
});

这是服务器端的类:

public class TestingClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

这里是控制器动作:

[HttpGet]
public ActionResult Edit(TestingClass testingClass)
{
    return PartialView("_ScheduledEvent", new ScheduledEventVM());
}

发生的情况是,即使在点击操作时对象不为空,Id 和 Name 都为空。

如果我将方法从 GET 更改为 POST,则对象会正确到达操作,但随后会收到 RequiredValidationToken 错误。而且由于我实际上没有使用令牌的表单,所以我真的没有选择。

有没有办法使用 GET 或者我真的需要使用 POST。

提前感谢您的帮助。

【问题讨论】:

  • 它只是data: jsonObject,(没有.stringify())而且它必须是dataType: "html",(不是json),因为你返回一个视图

标签: json ajax model-view-controller getmethod


【解决方案1】:

由于您的方法读取Edit,这意味着它正在更改服务器的状态。希望在数据库中进行更新操作。
RequiredValidation Token 错误而言,我认为您在谈论AntiForgeryToken。您可以通过删除 post 请求中的 [ValidateAntiForgeryToken] 属性来避免这种情况,或者您可以使用辅助方法从客户端提供相同的令牌。
如果您在视图中写入Html.AntiForgeryToken(),它将在html 中创建一个名为__RequestVerificationToken 的隐藏字段。您可以获取此值并将其与 ajax 请求的数据和标头一起推送。完成此操作后,您的问题就会消失。

【讨论】:

  • 感谢您的回复。为此,我不得不使用 POST 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2018-12-18
  • 2017-05-03
相关资源
最近更新 更多