2011-01-01 3 views
0

마스터 페이지 (<%: Session["companyname"].ToString() %>)에 세션 값을 표시하면 다음 정보가 페이지 { CompanyName = TestCompany}에 표시됩니다. 가치를 얻으려면 어떻게해야합니까?ASP.Net MVC 마스터 페이지에 세션 값 표시

도움 주셔서 감사합니다.

+0

당신이 값이 세션에 저장되어있는 코드를 게재 할 수 있습니까? – tvanfosson

+0

'Session [ "companyname"]'에 저장된 객체는'string'이 아니지만 커스텀'.ToString()'오버라이드를 구현 한 클래스로 만들어 졌다고 말할 수 있습니다. – hangy

+0

@hangy - 나는 익명의 객체를 의심하지만 코드가 없으면 알기 어렵습니다. – tvanfosson

답변

5

값이 세션에 저장되는 위치에 코드를 표시 할 수 있다면 내가 도울 수있는 가능성이 더 높습니다. 그래도 세션에서 직접 값을 사용하여 재검토하고 싶을 수도 있습니다. 필자의 의견으로는 모든 뷰 모델이 CompanyName 속성과 마스터 페이지에서 요구하는 기타 공통 속성을 가진 기본 뷰 모델을 갖는 것이 좋습니다. 그러면 마스터 페이지가 기본보기 모델에 강력하게 입력 될 수 있으며 모델의 값을 사용할 수 있습니다. 나는이 패턴을 몇 가지 프로젝트에서 성공적으로 사용했다. 공통 속성이보기 결과에 대해 채워지는 기본 컨트롤러와 함께 사용하면 OnActionExecuted()으로 코드 복제를 줄이고 마법 문자열을 사용하면 매우 효과적 일 수 있습니다.

모델 :

public abstract class CommonViewModel 
{ 
    public string CompanyName { get; set; } 
    public string UserDisplayName { get; set; } 
    ... 
} 

컨트롤러 :

public abstract class BaseController 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     if (filterContext.Result is ViewResult) 
     { 
      var model = filterContext.ViewData.Model as CommonViewModel; 
      if (model != null) 
      { 
       model.CompanyName = Session["CompanyName"] as string; 
       model.UserDisplayName = Session["UserDisplayName"] as string; 
      } 
     } 
    } 
} 

마스터 페이지 :

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<Foo.CommonViewModel>" %> 
<!-- ... --> 
<div> 
    <%: Model.CompanyName %> 
</div> 
<!-- ... --> 
<div> 
    <%: Model.UserDisplayName %> 
</div>