自定义视图引擎位置查看模型解析问题



所以我一直在修补我正在使用的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"
}; 

希望它有帮助!

相关内容

  • 没有找到相关文章

最新更新