2009-10-08 36 views
2

我正在使用Ajax.BeginForm創建表單,該表單將執行ajax回發到某個控制器操作,然後響應視圖是插入到UpdateTargetId中。ASP.NET MVC Ajax發佈到需要驗證的操作返回用戶會話超時時的登錄視圖

using (Ajax.BeginForm("Save", null, 
     new { userId = Model.UserId }, 
     new AjaxOptions { UpdateTargetId = "UserForm" }, 
     new { name = "SaveForm", id = "SaveForm" })) 
    { 
    [HTML SAVE BUTTON] 
    } 

除非用戶會話超時,然後他們被重定向回登錄頁面,否則一切都會很好。然後,由於Authorize屬性,登錄頁面從Ajax調用中返回,並且將html加載到UpdateTargetId中,因此我最終在用戶配置文件頁面(在目標標識中)顯示登錄頁面html。我的控制器動作如下所示:

[Authorize] 
public ActionResult Save(Int32 UserId) 
{ 
    //code to save user 
    return View("UserInfoControl", m); 

} 

我該如何解決這個問題?

UPDATE(2011-10-20): 找到這個post from Phil Haack關於這個確切的問題 - http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx。我還沒有機會消化或實施他的解決方案。

+0

在這裏看到這個問題:http://stackoverflow.com/questions/743252/how-may-i-best-use-the-authorize-attribute-with-ajax-and-partial-views –

+0

感謝您的鏈接,但我沒有使用jQuery ...只是ASP.NET MVC內置的Ajax.BeginForm助手(這是使用jQuery?)。 –

+0

包含部分的視圖是否具有Authorize屬性? –

回答

0

我認爲你可以在操作中處理授權問題。 首先刪除[授權],使用此代碼:

public ActionResult Save(Int32 UserId) 
{ 
    if (!User.Identity.IsAuthenticated) 
    { 
     throw new Exception(); 
    } 
    //code to save user 
    return View("UserInfoControl", m); 

} 

然後,你可以把一個onFailure處條件在AjaxOptions和重定向頁面,或什麼的。

+0

我想這可能會工作,但然後我使用商業邏輯的例外......你永遠不想做的事情。 –