代码之家  ›  专栏  ›  技术社区  ›  Webjedi

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

  •  2
  • Webjedi  · 技术社区  · 17 年前

    我试图在ASP.NET MVC site.master中构建一个全局菜单,我想知道如何从site.master标记访问应用程序设置属性?以前,我可能会从site.master的代码中实例化一个配置对象,然后设置一个公共属性。但现在我抓挠我的头…一定需要更多的咖啡。

    更新了应答码

    向名为baseurl的应用程序属性添加了字符串设置,并将其值设置为“ http://mysite.com "

       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"]); %>
    
    2 回复  |  直到 17 年前
        1
  •  1
  •   tvanfosson    17 年前

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

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

        2
  •  0
  •   Priyen Pillay    8 年前

    @System.Configuration.ConfigurationManager.AppSettings["AppSetting"]