我有一个MVC应用程序,其中自定义视图引擎实现了主题选择,即视图主页面的动态设置。描述了app结构 here 问题是母版页位于Views文件夹中的默认位置之外。 (这是因为我希望所有与主题相关的文件,即css和图像与master一起放在一个地方。将css放入Views会破坏安全问题 - 默认视图'web.config将不允许访问那里的任何内容我宁愿保持这种方式。)一切正常,直到我尝试将主页改为强类型,即指定
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<MyApp.Models.BaseModel>" %>
然后页面抛出错误:
无法加载System.Web.Mvc.ViewMasterPage&lt; MyApp.Models.BaseModel&gt;
那么,有没有办法将该命名空间导入到需要它的位置?要更改web.config中的某些设置(在Views文件夹中,我假设)或其他地方?
答案 0 :(得分:0)
您始终可以将信息作为ViewData传递并将其强制转换为强类型。或者您可以创建一个ViewDataFacade类,以便在类本身中处理转换。
<强>更新强>
控制器(或控制器基础中类似的东西):
public class MyController
{
public ActionResult Index()
{
ViewData["MyComplexType"] = GetMyComplexType();
return View();
}
}
ViewDataFacade类将是:
public class ViewDataFacade
{
public MyClass MyComplexType { get; set; }
public ViewDataFacade(ViewDataDictionary viewData)
{
//If it exists, cast the viewdata object as MyComplexType, or return a new instance.
this.MyComplexType = viewData["MyComplexType"] != null ? (MyClass)viewData["MyComplexType"] : new MyClass();
}
}
查看:强>
<%-- Constructor for the ViewDataFacade takes the current ViewData --%>
<% ViewDataFacade viewData = new ViewDataFacade(ViewData); %>
<%-- Example of MyComplexType that is a collection, with a single item (MyProperty) --%>
<ul>
<% foreach(var item in viewData.MyComplexType) { %>
<li><%= item.MyProperty %></li>
<% } %>
</ul>
答案 1 :(得分:0)
这是猜测...但是当您尝试在视图代码中使用名称空间(例如对于HTML帮助程序)时,您会在这些行中出现错误,而视图引擎无法引用这些名称空间,并且您可以通过将其添加到部分中的web.config。
所以也许这会解决它?
<add namespace="MyApp.Models"/>