2014-02-27 2 views
1

화면 상단에 사용자 이름을 유지하고 싶습니다. 여러 개의 뷰와 컨트롤러가 있습니다. 다른 페이지로 이동할 때도 동일한 값을 유지하려고합니다.ASP.NET MVC는 로그인 후 사이트 상단에 사용자 이름을 표시합니다.

나는

@Html.DevExpress().Label(settings => 
{ 
    settings.Text = ViewBag.Name; 

    }).GetHtml() 

내가 shared folder - _mainLayout에이 라벨을 추가 한

을 사용했다 (그래서 라벨은 모든 페이지에 사용할 수 있어야합니다)

또한 세션 varibles,을 ViewData와 Tempdata로했습니다. 그러나이 값은 하나의 견해에서만 유지됩니다. 다른보기로 이동하면 렌더링되지 않습니다.

어떻게 수행 할 수 있습니까? 현재 사용자의 이름이 필요하면

답변

2

, 당신은 더 나은 이런 식으로 얻을 수 :

@Html.DevExpress().Label(settings => 
{ 
    settings.Text = this.User.Identity.Name; 

}).GetHtml() 

ViewBag,을 ViewData와 Tempdata이 페이지에 당신이에서 리디렉션/이동 한 경우에만 유효합니다 컨트롤러에서 설정합니다.

편집 :

//set cookie 
var cookie = new HttpCookie("username", "ElectricRouge"); 
Response.Cookies.Add(cookie); 

//Get cookie 
var val = Request.Cookies["username"].Value; 
+0

세션을 시도했지만 다른보기 (페이지)에서 작동하지 않습니다. 로그인 페이지의 사용자 이름 필드에 사용자가 입력 한 값을 유지하려고합니다. 나는 어떤 종류의 인증도 사용하지 않고있다. 이게이 시나리오에서 효과가 있을까요? – ElectricRouge

+0

어쩌면 쿠키? – VladL

+0

견본을 제공해 주시겠습니까? – ElectricRouge

0

이 방법은 컨트롤러에 대한 조치 실행을 처리 할 액션 필터 속성 클래스를 사용합니다. 먼저 새로운 액션 필터 클래스를 생성하고 원하는 모든 것을 호출해야하지만 ActionFilterAttribute 클래스에서 상속하게해야합니다. 그런 다음 ActionExecutedContext 인수로 오버라이드 OnActionExecuted 방법을 추가해야합니다 : 다음

public class BaseViewModel() 
{ 
    public string UserName {get;set;} 
} 

:

public class ExampleActonFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     BaseViewModel model = filtercontext.Controller.ViewData.Model; 

     if (filterContext.Controller.ControllerContext.HttpContext.Session["UserName"] != null) 
     { 
      model.UserName = filterContext.Controller.ControllerContext.HttpContext.Session["UserName"]; 
     } 
    } 
} 

다음, 당신은 당신의 레이아웃 페이지는 문자열로 이름을 복용 공공 문자열 매개 변수와 뷰 모델을 가지고 레이아웃 페이지에 값이 null이 있는지 확인하기 위해 (당신이이 그려 질 싶습니다) 간단한 체크를해야하고, 그렇지 않은 경우는, 그래서처럼 그릴 :

if (string.IsNullOrWhiteSpace(@Model.UserName)) 
{ 
    <span>@Model.UserName</span> 
} 

이제 사용자 이름을 표시하려는 모든보기에서 해당 페이지에 대한 ViewModel을 BaseViewModel 클래스에서 상속 받아 표시하고 싶을 때 사용자 이름을 세션 변수로 설정하면됩니다.

는 SO 세션 변수에 대한 자세한 내용은 게시 이것 좀 유무 : here

난이 도움이되기를 바랍니다!

관련 문제