2013-06-05 131 views
1

我想通过Ajax的传递JSON数据到控制器(我refered到AntiForgery and JSON incompatible?之前),这是我的代码:在果园使用AJAX CMS

阿贾克斯:

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是真正的价值:

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

但是,它仍然上涨了错误

{ “所需的防伪表单字段\”__ RequestVerificationToken \“ is not present。“}

我试图同时使用@ Matthew的方法和@Giscard Biamby's,但它不再工作。

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

回答

0

请勿将您的有效负载串联起来。让jQuery负责发送数据。现有代码中有一些示例。在Orchard代码中搜索$.post(。你会在Orchard.MediaPicker中找到一个。

+0

我会尽量根据你的建议和后面的答复结果来解决它。谢谢@Bertrand Le Roy –

0

尝试添加[ValidateAntiForgeryToken]到头功能

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

客户I发送数据这样

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

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

后这改变错误消失(对我来说)