2016-10-21 55 views
0

我需要在頂部菜單中顯示用戶名,我將其添加到ViewData,但是在搜索頁的搜索頁中,因爲我正在回發,數據不再存在。我如何在不使用tempdata的情況下持久化。請觀看包或會議。在回發後保留MVC中的值持久性

這是我成功登錄後顯示搜索視圖的登錄頁面。

[HttpPost] 
    [Route("login")] 
    public async Task<ActionResult> Login(LogInRequest logInRequest) 
    { 
      User user = null; 
     if (ModelState.IsValid) 
     { 
      user = await GetUserByEmailAndPassword(logInRequest.UserName, logInRequest.Password); 
      if (user.Id != 0) 
      { 
        ViewData["Name"] = user.Name; 
        return View("~/Views/LoanDriver/Search.cshtml"); 
       } 
       else 
       { 
        return View("~/Views/LoanDriver/Dashboard.cshtml"); 
       } 
       ...... 
      return View("~/Views/Home/Index.cshtml"); 
      } 

,這是我搜索的看法:

@model CarFinance.Garage.Web.Models.SearchResult 

@{ 
Layout = "~/Views/Shared/_SecondaryPage.cshtml"; 
} 
@using (Html.BeginForm("SearchResult", "LoanDriver", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken() 
    .......} 
    @Html.Partial("~/Views/LoanDriver/SearchResult.cshtml") 

,這是母版頁,顯示在頂部的菜單:

@{ 
     Layout = "~/Views/Shared/MasterLayout.cshtml"; 
    } 
@section header { 

       @(ViewData["Name"]) 

它顯示了第一次,但我將搜索按鈕刷新(回傳)到頁面名稱爲空。

+1

使用包含屬性的基本視圖模型的視圖模型(並在每個請求中設置其值),然後在佈局中引用基礎模型 –

+0

@Stephen Muecke您可以請expian moew或鏈接到我如何使用? – Alma

+0

使用'@(ViewData [「Name」])'也適用於你(或'ViewBag.Name'),但你需要在每個請求中設置值 - 所以在每一個你需要獲取當前用戶的方法中設置它(就像您在Login POST方法中所做的一樣) –

回答

0

我會做到這一點的最佳方式是自己創建一個BaseController

所以基本上

public class BaseController : Controller 
{ 
    protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     // Here you can run any code you like, this code will always run after any action has been executed 
     ViewData["Name"] = "User Name"; 
     base.OnActionExecuted(filterContext); 
    } 
} 

然後在你的控制器,你只是繼承BaseController

public class HomeController : BaseController

所以現在每一頁上請求它將首先填充ViewData["Name"]