我正在尝试在我的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"]); %>
答案 0 :(得分:1)
这是我可能会使用的策略。创建一个基本控制器,您的其他控制器将从该控制器派生并从Controller派生。覆盖基本控制器中的ActionExecuted方法,让它访问应用程序设置(并可能缓存它们)。为菜单生成ViewData,作为分配给ViewData中特定键的强类型菜单模型类。您只需要将模型提供给返回ViewResult(以及可能是PartialViewResults)的操作。
创建一个强类型的局部视图,使用菜单模型类实现全局菜单标记。通过RenderPartial将其包含在MasterPage定义中。将与键对应的ViewData项作为Model传递给局部视图,以便您可以在菜单中使用模型的属性。