2010-02-26 23 views
1

我正在嘗試執行異步登錄。當用戶通過身份驗證時,我想重定向到用戶最初請求的頁面。問題是,操作方法返回的ActionResult的重定向類型和jQuery的似乎不知道該怎麼辦..RedirectResult不能使用jQuery.post()

我使用以下的jQuery:

$("form").submit(function(event) 
{ 
    $.post($(this).attr("action"), $(this).serialize(), function(result) 
    { 

    }, "html"); // is this the right return type? 

    return false; 
}); 

與此代碼在服務器上處理登錄:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult LogOn(WAPConfigUser user) 
{ 
    if (ValidateLogOn(user.UserName, user.Password)) 
    { 
     string redirect = ""; 
     if (Request.QueryString["ReturnUrl"] != null) 
     { 
      redirect = Request.QueryString["ReturnUrl"]; 
      return Redirect(redirect); 
     } 
     else 
     { 
      return RedirectToRoute("Default"); 
     } 
    } 
} 

有人建議我怎麼能得到這個工作?

感謝

戴夫

回答

0

事實證明,我發佈到AccountController的默認路由,它返回整個頁面的視圖,這又將調用LogOn方法。該操作方法將返回重定向,但它位於索引視圖的上下文中。

不知何故,重定向「在所有的大驚小怪」,這就是說我不知道​​究竟發生了什麼,但是當我開始直接發佈到LogOn方法,它開始工作。

1

首先,我不認爲在不在。加上登錄用戶的好方法,那麼你的控制器恢復時,用戶名或密碼錯誤?

無論如何,這裏有一種方法可以從響應中讀取頭文件並使用jQuery進行重定向。

$("form").submit(function(event) { 
    $.ajax({ 
     type: "POST", 
     url: $(this).attr("action"), 
     data: $(this).serialize(), 
     complete: function (XMLHttpRequest, textStatus) { 
      if(XMLHttpRequest.status === 302) { 
       //if it wants to redirect 
       window.location = XMLHttpRequest.getResponseHeader("Location"); 
      } 
     } 
    }); 
    return false; 
}); 

我沒有測試這個,但它應該給你一個想法。

+0

它實際上適用於你可以建議一個更好的方式讓我去做這件事嗎?我做這件事的方式有什麼問題? – DaveDev 2010-02-26 22:21:05

+2

@Dave,如果您打算在最後重定向用戶,則實際上不需要使用AJAX。 – 2010-02-26 22:38:27

+0

不一定,但我不想做一個頁面刷新,如果用戶沒有成功登錄。如果這是一個錯誤的登錄嘗試,我只是想異步返回一條錯誤消息 – DaveDev 2010-03-01 11:55:34