【问题标题】:Using ajax in Orchard CMS在 Orchard CMS 中使用 ajax
【发布时间】:2013-06-05 10:32:35
【问题描述】:

我想通过 Ajax 将 Json 数据传递给 Controller(我之前提到过 AntiForgery and JSON incompatible?),这是我的代码:

阿贾克斯:

var self = this;
self.Url = ko.observable();
self.Description = ko.observable();
self.ValueName = ko.observable();
self.MatchRegex = ko.observable();
self.__RequestVerificationToken = ko.observable('@Html.AntiForgeryTokenValueOrchard()');

self.Xpaths = ko.observableArray([
    { Name: 'RootXPath', Xpath: '', Regex: '', isRootXPath: true }
]);

self.addRow = function () {
    self.Xpaths.push({ Name: '', Xpath: '', Regex: '', isRootXPath: false });
};

self.removeRow = function () {
    if (this.name == 'RootXPath')
        return;
    self.Xpaths.remove(this);
};
self.executeExtractScript = function () {
var myValues = JSON.stringify(ko.toJS(self));
$.ajax({
    url: '@Url.Action("EExtractScriptTemp", "Home", new { area = "Crawler" })',
    type: 'POST',
    data: myValues,
    contentType: 'application/json; charset=utf-8',
    success: function () {
        $(".result").html("Success");
        runEffect();
    },
    error: function () {
        $(".result").html("Error");
        runEffect();
    }
});

};

我的控制器

[HttpPost]
public ActionResult EExtractScriptTemp(ExtractScriptTempModels objectJSon) {
   return null;
}

myValues 的真正价值是(通过检查 Chrome 中的元素):

"{"__RequestVerificationToken":"6ygUGMe1PER7FizLBqCDJLcSfp9zuA4dcRyUHCwVwkWzOTO0AiRF8QRSDwoqRI-SD9FfiFvF-jozFKL10HS21xTBlRP4EndYbmGhPSX_Kuk1F0r0swYnGZZxZdy793eQxfmkvjIUtnwdLtrg0q8zhFdZNJBvmiPA6dC57prmw1c1","Xpaths":[{"Name":"RootXPath","Xpath":"","Regex":"","isRootXPath":true}]}"

但是还是升错了

{"必填的防伪表单字段\"__RequestVerificationToken\" 不存在。"}

我尝试过同时使用@Matthew 的方法和@Giscard Biamby 的方法,但它不再起作用了。

我的问题是什么? 非常感谢!

【问题讨论】:

    标签: jquery ajax content-management-system orchardcms


    【解决方案1】:

    不要对您的有效负载进行字符串化。让 jQuery 负责发送数据。现有代码中有示例。在 Orchard 代码中搜索 $.post(。您会在 Orchard.MediaPicker 中找到一个。

    【讨论】:

    • 我会根据您的建议尝试解决,稍后回复结果。谢谢@Bertrand Le Roy
    【解决方案2】:

    尝试在函数头部添加[ValidateAntiForgeryToken]

    [HttpPost]
    [ValidateAntiForgeryToken] 
    public ActionResult EExtractScriptTemp(ExtractScriptTempModels objectJSon) {
       return null;
    }
    

    在客户端我这样发送数据

    //find the Token
     var token = $('input[name="__RequestVerificationToken"]').val();
    
         data: {
        "someText": "Text",
          "__RequestVerificationToken": token
            },
    

    此更改后错误消失(在我的情况下)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多