将signed_request和AJAX调用一起传递给使用CanvasAuthorize修饰的ActionMethod

这是使用CanvasAuthorize进行装饰时AJAX调用不触发操作方法的后续操作

所以我找到了以下链接,似乎这是一个常见的问题:

http://facebooksdk.codeplex.com/discussions/251878

http://facebooksdk.codeplex.com/discussions/250820

我试图遵循prabir的建议,但我无法让它工作……

这是我的设置:

我在页面中有以下片段,其中触发整个post到facebook的按钮位于:

@if (!string.IsNullOrEmpty(Request.Params["signed_request"])) {  } 

然后我有这个片段(在同一页面内的脚本标记内):

  var signedRequest = $('#signedReq').val(); $('.facebookIcon').click(function () { var thisItem = $(this).parent().parent(); var msg = thisItem.find('.compItemDescription').text(); var title = thisItem.find('.compareItemTitle').text(); var itemLink = thisItem.find('.compareItemTitle').attr('href'); var img = thisItem.find('img').first().attr('src'); postOnFacebook(msg, itemLink, img, title, signedRequest); }); 

最后,在外部js文件中我有以下function:

 /*Facebook post item to wall*/ function postOnFacebook(msg, itemLink, pic, itemTitle, signedReq) { console.log(signedReq); var siteUrl = 'http://www.localhost:2732'; $.ajax({ url: '/Facebook/PostItem', data: { 'message': msg, 'link': siteUrl + itemLink, 'picture': siteUrl + pic, 'name' : itemTitle, 'signed_request': signedReq }, type: 'get', success: function(data) { if(data.result == "success") { alert("item was posted on facebook"); } } }); } 

但signedReq总是未定义的。 而且我不确定我应该在数据对象中传递’signed_request’字段。 有什么想法吗?

确保正在填充隐藏的输入字段。

此外,当您尝试通过JQuery提取输入字段的ID时,您可能无法引用正确的元素,因为.NET Butcher的ID是服务器上运行的任何内容。

当我使用隐藏的输入字段技巧时,我设置jquery值如下:

var signedRequest = $(’#<%= signedReq.​​ClientID%>‘)。val();

这样,我就获得了.NET给HTML元素的标识符。

希望有所帮助。

只是一个猜测 – 在你的隐藏字段中:id =“signed_request”而不是id =“signedReq”