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

时间:2011-01-01 21:45:27

标签: asp.net-mvc asp.net-mvc-2

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

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

型号:

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>