ASP.Net MVC在母版页中显示会话值

Zaf*_*iro 0 asp.net-mvc asp.net-mvc-2

当我在母版页(<%: Session["companyname"].ToString() %>)中显示会话值时,页面上会显示以下信息{ CompanyName = TestCompany}.我如何获得价值?

谢谢你的帮助!

tva*_*son 5

如果您可以显示会话中存储值的代码,那么我更有可能提供帮助.不过,我建议您可能需要重新考虑直接在视图中使用会话中的值.在我看来,最好有一个基本视图模型,所有视图模型都来自具有CompanyName属性的基础视图模型,以及主页面所需的任何其他常见属性.然后,您的母版页可以强类型化到基本视图模型,您可以使用模型中的值.我已经在几个项目中使用了这种模式并取得了很好的成功.将它与基本控制器耦合,其中填充了公共属性以用于查看结果OnActionExecuted(),它可以非常有效地减少代码重复和在视图中使用魔术字符串.

模型:

public abstract class CommonViewModel
{
    public string CompanyName { get; set; }
    public string UserDisplayName { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

控制器:

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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

母版页:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<Foo.CommonViewModel>" %>
<!-- ... -->
<div>
   <%: Model.CompanyName %>
</div>
<!-- ... -->
<div>
   <%: Model.UserDisplayName %>
</div>
Run Code Online (Sandbox Code Playgroud)