在ASP.NET MVC视图中访问应用程序设置

时间:2009-05-07 15:10:24

标签: asp.net-mvc

我正在尝试在我的ASP.NET MVC site.master中构建一个全局菜单,我想知道如何从site.master标记访问Application Settings属性?以前我可能会从我的site.master的代码隐藏中实例化一个配置对象,然后设置一个公共属性。但现在我正在挠头......必须要更多的咖啡。

更新了答案代码

为名为baseurl的应用程序propererties添加了一个字符串设置,并为其赋予了值“http://mysite.com

制作GlobalMenu.cs的模型类

   public class GlobalMenu
{
    private string _baseurl;
    public string baseurl
    {
        get { return _baseurl; }
        set
        {
            _baseurl = value;
        }
    }

}  

创建了一个名为BaseController的基本控制器类,并继承自Controller,并因此过度使用OnActionExecuted:

     protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        string baseurl = Properties.Settings.Default.baseurl;

        GlobalMenu menumodel = new GlobalMenu();
        menumodel.baseurl = baseurl;
        ViewData["menudata"] = menumodel;
        base.OnActionExecuted(filterContext);
    }  

在共享文件夹中创建了一个名为ViewGlobalMenu的局部视图,该文件强烈键入GlobalMenu,看起来像这样......但显然有更多东西:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Web.Models.GlobalMenu>" %>

最后在Site.Master中,我将其添加到我希望菜单显示的位置:

<%Html.RenderPartial("ViewGlobalMenu", (MyApp.Web.Models.GlobalMenu)ViewData["menudata"]); %>

1 个答案:

答案 0 :(得分:1)

这是我可能会使用的策略。创建一个基本控制器,您的其他控制器将从该控制器派生并从Controller派生。覆盖基本控制器中的ActionExecuted方法,让它访问应用程序设置(并可能缓存它们)。为菜单生成ViewData,作为分配给ViewData中特定键的强类型菜单模型类。您只需要将模型提供给返回ViewResult(以及可能是PartialViewResults)的操作。

创建一个强类型的局部视图,使用菜单模型类实现全局菜单标记。通过RenderPartial将其包含在MasterPage定义中。将与键对应的ViewData项作为Model传递给局部视图,以便您可以在菜单中使用模型的属性。