Ajax帖子找不到动作控制器

时间:2014-03-18 19:35:27

标签: ajax asp.net-mvc asp.net-ajax facebook-javascript-sdk action

我正在编写一个简单的网络应用程序,允许用户通过Facebook登录。当使用javascript sdk时,我能够检索正确的凭据,但是我的ajax帖子无法找到mvc动作来处理信息。

这是js代码:

        FB.getLoginStatus(function (response) {
            if (response.status === 'connected') {
                var credentials = { uid: response.authResponse.userID, accessToken: response.authResponse.accessToken };
                SubmitLogin(credentials);
            }
        });

        function SubmitLogin(credentials) {
            alert("Creds: " + credentials.uid + ":::" + credentials.accessToken);
            $.ajax({
                type: "POST",
                ContentType: 'application/json',
                url: '@Url.Action("FacebookLogin","Home")',
                data:JSON.stringify(credentials), 
                success: function () {
                    window.location("~/Views/Account/Home.cshtml");
                },
                 error: function (XMLHttpRequest, textStatus, errorThrown) {
                     alert(XMLHttpRequest.responseText);
                 }
           });
        }

和相应的控制器:

    [HttpPost]
    public JsonResult FacebookLogin(string uid, string accessToken)
    {
        Session["uid"] = uid;
        Session["accessToken"] = accessToken;

        return null;
    }

控制器中使用的模型:

public class FBLoginModel
{
    public string uid { get; set; }
    public string accessToken { get; set; }
}

js函数中的警报显示正确的令牌,但我的ajax帖子无法执行操作。当我删除控制器上方的“[HttpPost]”时,我可以访问该操作,但我尝试传递的所有数据都为空。

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:2)

使用

   $.ajax({
         type: "POST",
         ContentType: 'application/json',
         url: '@Url.Action("FacebookLogin","Home")',
         data:JSON.stringify(credentials),
         success: function () {
              window.location("~/Views/Account/Home.cshtml");
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
               alert(XMLHttpRequest.responseText);
         }
     });

Ther应该在< Url.Action()'

中单引号

Yout控制器操作应如下所示。因为您没有传递模型项

 public JsonResult FacebookLogin(long uid,string accessToken)
    {
    Session["uid"] = uid;
    Session["accessToken"] = accessToken;
    return null; //Because you are not posting anything back
    }

答案 1 :(得分:1)

我以某种方式设计了一个解决方案...通过写出url并在我的ajax调用中添加正斜杠,不知怎的,我的ajax调用可以找到我的动作。

$.ajax({
     type: 'POST',
     url: 'Home/FacebookLogin/',
     data: {
         'uid': response.authResponse.userID,
         'accessToken': response.authResponse.accessToken
     },
     cache: false,
     success: function (result) { },
     error: function (XMLHttpRequest, textStatus, errorThrown) {
         alert(XMLHttpRequest.responseText);
     }
});