在Orchard CMS中使用ajax

时间:2013-06-05 10:32:36

标签: jquery ajax content-management-system orchardcms

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

的Ajax:

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,但这已经不再适用了。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试将[ValidateAntiForgeryToken]添加到函数的头部

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

在客户端我发送这样的数据

//find the Token
 var token = $('input[name="__RequestVerificationToken"]').val();

     data: {
    "someText": "Text",
      "__RequestVerificationToken": token
        },

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