所以我一直在修补我正在使用的MVC应用的查看位置,特别是因为我需要能够在子站点中使用parent的浏览量/路由。
最终,我希望能够从其他位置(例如/siteaviews/.. where〜是站点B的根)提供视图由Sitea建立活动。
使用自定义视图引擎听起来很容易。但是,我在自定义视图引擎(示例更改下)中进行了此操作,该引擎添加到视图和主页的位置。当访问URI时,就会发生问题,因此在Sitea DLL中定义的路线(在SiteB中引用)。
this.ViewLocationFormats = new string[8]
{
"~/Views/{1}/{0}.aspx",
"~/Views/{1}/{0}.ascx",
"~/Views/Shared/{0}.aspx",
"~/Views/Shared/{0}.ascx",
"~/SiteAViews/{1}/{0}.aspx",
"~/SiteAViews/{1}/{0}.ascx",
"~/SiteAViews/Shared/{0}.aspx",
"~/SiteAViews/Shared/{0}.ascx"
};
如果我更改视图引擎并发布构建任务,将/复制内容复制到〜/views/sitea/..而不是〜/siteaviews/..所有这些都很好,可以很好地解析ViewModel。但是,使用〜/siteaviews/..我收到以下内容。
异常类型:httpparseException异常消息:无法加载 键入'system.web.mvc.viewpage<'shared.myviewModel'>'。在 system.web.ui.templateparser.parsestring(字符串文本,VirtualPath VirtualPath,编码fileencoding)at system.web.ui.templateparser.parsefile(字符串物理路径, VirtualPath VirtualPath)at System.web.ui.templateparser.parse()at system.web.compilation.basetemplatebuildprovider.get_codecompilertype() 在 system.web.compilation.buildprovider.getCompilerTypeFrombuildProvider(buildProvider buildprovider)at system.web.compilation.buildproviderscompiler.processbuildproviders() at System.web.compilation.buildproviderscompiler.performbuild()at system.web.compilation.buildmanager.compilewebfile(VirtualPath VirtualPath)
您缺少在 views> views 文件夹中找到的web.config
文件中的信息。在ASP.NET中,根据web.config
文件的层次结构,将解决给定文件夹的配置:
machine.config -> root application web.config -> subdirectory web.config
在ASP MVC的情况下,> views 文件夹中的web.config文件将配置在将每个视图编译到其类中时要包含的默认命名空间,并且可以防止视图文件的默认处理程序直接访问。看到这个问题。
由于您创建了另一个目录 siteaviews 在项目的根部(即在 views> views 文件夹之外),因此您缺少~/Views/web.config
提供的基本MVC配置。您可以通过将~/Views/web.config
复制到~/SiteAViews/web.config
中来解决。(如果您使用的是剃须刀,您可能还需要复制_viewstart.cshtml文件)
如果您不喜欢维护2个类似的配置文件,则需要使用一个通用根来创建一个视图文件夹层次结构。>
~/ViewLocations/web.config //common asp mvc views config
~/ViewLocations/Views/ //SiteB views
~/ViewLocations/SiteAViews/ //SiteA views
//In your view engine:
this.ViewLocationFormats = new string[8]
{
"~/ViewLocations/Views/{1}/{0}.aspx",
"~/ViewLocations/Views/{1}/{0}.ascx",
"~/ViewLocations/Views/Shared/{0}.aspx",
"~/ViewLocations/Views/Shared/{0}.ascx",
"~/ViewLocations/SiteAViews/{1}/{0}.aspx",
"~/ViewLocations/SiteAViews/{1}/{0}.ascx",
"~/ViewLocations/SiteAViews/Shared/{0}.aspx",
"~/ViewLocations/SiteAViews/Shared/{0}.ascx"
};
希望它有帮助!