2014-02-07 51 views
0

我有一個MVC 3 web應用程序(更像是一個子應用程序,真的),它不依賴於ASPNET進行身份驗證,因爲它已經在應用程序的另一個區域中使用,我們正在使用不同類型的憑據。無論如何,我決定使用自己的SQL表創建我自己的認證系統,該表在應用中的一種表單上工作正常。現在,我正在嘗試將其轉換爲共享佈局,並在主控制器中調用「登錄」操作。我遇到的問題是如何從該登錄操作返回到用戶所在的位置。當我嘗試「返回查看();」可以理解地嘗試返回到不存在的Home/Login視圖。我如何從行動返回到行動前的任何地方?所有的視圖使用共享的佈局,所以我希望這很簡單!如何將我的ActionResult返回到正確的視圖?

public class HomeController : Controller  
{ 

..... 

    private DataModel db = new DataModel(); 

    // 
    // GET: /Home/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Login() 
    { 

     string un = Request["form_un"]; 
     string pc = Request["form_pc"]; 
     int usercount = db.JobBoardUsers.Where(u => u.userid.Equals(un) && u.passcode.Equals(pc)).Select(u => new AccountModel() { uid = u.id }).Count(); 
     usercount = db.JobBoardUsers.Where(u => u.userid.Equals(un) && u.passcode.Equals(pc)).Count(); 
     if (usercount > 0) 
     { 
      HttpContext.Session["IsSignedIn"] = true; 
      HttpContext.Session["IsSignedInId"] = un; 
     } 
     return View(); 
    } 
+0

你明確地進入'登錄'視圖(即你是否調用這個動作或服務器是否重定向未經身份驗證的用戶)?根據你的邏輯,你可以使用'Request.Path'來確定目標地址。甚至是'Request.UrlReferrer'。 –

+0

這是明確的。登錄表單上的操作是「主頁/登錄」。該應用完全可以不經過身份驗證(登錄提供了一些附加功能,如記住用戶的信息),所以我不想自動重定向到登錄頁面。 – Ryan

回答

1

相反的return View(),您需要使用返回RedirectToAction或返回Redirect方法。

您可以用不同的方法

1)通過當前頁面的網址登錄操作方法作爲參數,並利用它來進行身份驗證成功後重定向在你登錄操作的前一頁得到

2)使用Request對象獲取UrlReferrer屬性值並將其用作要重定向的頁面。

Chek this blog post他們解釋了他們在nerddinner中是如何做到的。

+0

謝謝你,我去了#2,它完美的作品。我想,MV​​C有一個更復雜的標準來做這個事情,就像它看起來一樣。 – Ryan

+0

@Ryan歡迎您。很高興我能幫上忙 :) – Shyju

相關問題