ASP.NET MVC强烈键入了Views文件夹中的主页

时间:2010-10-30 18:30:46

标签: asp.net-mvc

我有一个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文件夹中,我假设)或其他地方?

2 个答案:

答案 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"/>