2013-07-07 153 views
0

我試圖實現演示應用程序來學習ASP.NET MVC。應用程序有三個視圖和相應的動作,也有登錄功能。在JsonResult中設置RedirectUrl操作方法

查看:

  1. Index.cshtml - 包含人信息網格
  2. PersonInfoView.cshtml - 顯示人鑑於模式
  3. PersonInfoEdit.cshtml信息 - 允許用戶編輯個人信息

默認路線:

routes.MapRouteWithName(
      "Default", // Route name 
      "", // URL with parameters 
      new { controller = "Person", action = "Index" } // Parameter defaults 
     ); 

對於個人檢視和編輯我創建了以下路線:

routes.MapRoute(
      "ViewPerson", // Route name 
      "View/{PersonId}", // URL with parameters 
      new { controller = "Person", action = "PersonInfoView", PersonId= "" } // Parameter defaults 
    ); 



routes.MapRoute(
      "EditPerson", // Route name 
      "{PersonId}", // URL with parameters 
      new { controller = "Person", action = "PersonInfoEdit", PersonId= "" } // Parameter defaults 
     ); 

所以,網址爲編輯的人是 「本地主機/ 1」 &的觀點 「本地主機/查看/ 1」

用戶可以查看或編輯個人信息。如果登錄用戶狀態,可以使用編輯選項(在索引中)。我在PersonInfoView.cshtml(如果用戶沒有登錄)中有登錄按鈕(它打開Jquery對話框),允許用戶在應用程序中登錄。

如果用戶通過PersonInfoView.cshtml頁面登錄到應用程序,我想將用戶重定向到編輯頁面。

登錄用戶動作返回JsonResult:

return Json(new { res = 1, RedirectUrl = "" }, JsonRequestBehavior.AllowGet); 

我如何設置的redirectUrl等於人編輯視圖,如果用戶登錄通過PersonInfoView.cshtml應用。

謝謝。

回答

1

常見的情況是重定向到PersonInfoEdit,但用[Authorize]屬性標記它。

如果用戶登錄,他會得到編輯頁面,否則他會被重定向到授權頁面。成功授權後,他將被重定向到編輯頁面。

+0

感謝您的答覆。但在我的應用程序中,我想要的是如果用戶未登錄,那麼用戶將始終得到「localhost/view/1」。如果用戶已登錄,那麼可以從索引頁面中選擇查看或編輯選項。如果沒有登錄,那麼我想在PersonInfoView中顯示登錄按鈕以在應用程序中登錄。這裏登錄不會重定向到任何頁面,而是顯示爲彈出(用戶名和密碼)。如果用戶通過PersonInfoView.cshtml登錄到應用程序,我希望將用戶重定向到編輯頁面 –

+0

如果您使用ajax登錄,則需要客戶端JavaScript,例如if(success)window.location = 「@url。Action(「PersonInfoEdit」,「Person」)「;' –

+0

是否可以發佈到POST方法例如上面的PersonInfoEdit可以是post方法 – coder771

0

您可以使用Url.Action

public ActionResult PersonInfoView() 
{ 
    var personId = 1; 
    var redirectionUrl = Url.Action("PersonInfoEdit", "Person", new { PersonId = personId }); 
    return Json(new { res = 1, RedirectUrl = redirectionUrl }, JsonRequestBehavior.AllowGet); 
} 

的JavaScript客戶端重定向

$(function(){ 
    $("#login").click(function(){ 
     $.post('@Url.Action("PersonInfoView","Person")',function(data){ 
      if(data.res == 1) 
      { 
       location.href = data.RedirectUrl; 
      } 
     }); 
     return false; 
    }); 
})