2015-04-30 181 views
0

我想添加一個登錄表單到ASP.NET MVC的默認_layout頁面現在5提供了默認MVC頭部佈局的登錄表單

雖然我知道如何包括部分頁面到我的佈局,我正在努力的一件事是模型。

如何添加模型到我的_Login視圖(駐留在_Layout中),但不是我的其他視圖?我需要在用戶登錄後切換它,因爲我不需要它。

如果登錄失敗後顯示某些模型錯誤,我該如何將用戶重定向到常規登錄頁面?

回答

1

這實際上很平凡。你只需要使用一個孩子的行爲。對於簡單的渲染基於模型的形式,所有你需要的東西就像在你AccountController類:

[ChildActionOnly] 
public ActionResult HeaderLogin() 
{ 
    var model = new LoginViewModel(); 
    return PartialView("_Login", model); 
} 

然後,在你的佈局只是調用下面,你希望它出現:

@Html.Action("HeaderLogin", "Account) 

唯一要記住的是,封裝您登錄字段的表單需要將其action屬性設置爲常規登錄頁面的URL。然後,它自然會進入標準登錄過程,顯示錯誤的實際登錄頁面。

+0

太棒了,沒有想到...這真的很平凡,幾分鐘後就可以接受你的答案:)謝謝! – SeToY

1

UPDATE:剛剛發現另一個答案,所以我的答案是一樣除了它:)

這是一個有點棘手解釋,但快報的分裂你的問題到子問題:

1)如何到redirrect使用這樣的事情:

var result = await mgr.PasswordSignInAsync(model.Login, model.Password, model.RememberMe, shouldLockout: false); 

switch (result) 
{ 
    case SignInStatus.Success: 
     ResetCaptchaCounter(); 
     return RedirectToLocal(returnUrl); 
    case SignInStatus.LockedOut: 
     IncreaseCaptchaCounter(); 
     ModelState.AddModelError("", "The account is locked, try again later."); 
     return View("Lockout"); 
    case SignInStatus.RequiresVerification: 
     ResetCaptchaCounter(); 
     return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false }); 
    case SignInStatus.Failure: 
    default: 
     ModelState.AddModelError("", "Wrong login or password!"); 
     IncreaseCaptchaCounter(); 
     return View(); 
} 

2)如何模型添加到_login視圖...

爲什麼不使用相同的型號?反正你的局部視圖和實際登錄視圖應該包含相同的輸入...

3)開關的局部視圖(登錄表單)顯示別的東西,當用戶登錄:

  1. 檢查用戶是否是驗證
  2. 呈現一些其他的局部視圖,如「註銷表」

詢問是否有更多的東西ü要知道,或者如果你想在某些部分更詳細的解答。

0

你可以把局部視圖放到佈局頁面上。

@ Html.Partial( 「〜/查看/ UserControlls/BreadCrum.cshtml」)

,您還可以通過一些MODLE到局部視圖,以及類似物。

@ Html.Partial(「〜/ Views/UserControlls/BreadCrum。cshtml「,型號)