asp.net-mvc-3 – ASP.NET MVC 3.0 Razor,从任何地方开始加载View?

是否可以从任何地方加载View
在MVC 3.0中实现自定义的VirtualPathProvider?

如果是真的怎么办?

基本上,实现自定义的VirtualPathProvider它将不会是一个问题
从任何地方查看,但是我的实现只能在MVC 2.0中工作,而不是MVC 3.0,因为某些原因方法GetFile newer调用MVC 3.0中不存在的视图,在这种情况下,我正在获得“Server Error in’/’Application”.

我从这里跟随我的自定义VirtualPathProvider相同的代码http://buildstarted.com/2010/09/28/mvc-3-razor-view-engine-without-a-controller/

更新1

确定我已经修复了我的自定义VirtualPathProvider的问题我注册我的自定义VirtualPathProvider提供者的第一行在Application_Start()

protected void Application_Start()
    {
        //Should be first line before routes and areas registration.
        HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());

        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

当在Global.asax.cs中注册自定义的VirtualPathProvider之后,将在ZoneRegistration.RegisterAllAreas();或者RegisterRoutes(RouteTable.Routes);方法方法重写VirtualFile GetFile(string virtualPath)将无法用于“虚拟视图”.

更新2

这是否意味着类RazorView和RazorViewEngineRender是答案?

更新3

如果我有文件系统中不存在的剃须刀视图的字符串表示(例如,我在数据库中存储剃刀视图),我可以使用这种方法渲染它http://buildstarted.com/2010/09/28/mvc-3-razor-view-engine-without-a-controller/

例如,我的视图的字符串表示形式如下所示:

"@{
    ViewBag.Title = ""About Us"";
}

<h2>About</h2>
<p>
     Put content here.
</p>"

更新4

现在我看,能够使用@ Html.< something>应该实现自定义的TemplateBase.
HtmlTemplateBase< T>的实现示例可能在这里http://www.fidelitydesign.net/?p=239,但它不会与RazorEngine v2工作,我成功获取模板编译,然后在程序集加载方法public override void Execute()将不会被执行我得到一个错误方法或操作是未实现(stacktrace:http://tinypic.com/r/dcow4/7)

为了使“公开覆盖T模式”发生,我在“公共抽象类TemplateBase:TemplateBase,ITemplate”中将“public TModel Model”的声明改为“public virtual TModel Model”.可能还有另外一个变化呢?或者HtmlTemplateBase< T>应该做另外一种方式?

解决方法

否,默认情况下不支持数据库加载视图.您需要编写自己的VirtualPathProvider.

请注意,本博客文章实际上并不直接解决您正在尝试解决的问题.以下博客文章看起来更接近您想要的内容http://rebuildall.umbraworks.net/2009/11/17/ASP_NET_MVC_and_virtual_views.请注意,如果您尝试在数据库中存储剃刀或aspx视图并不重要. Asp.Net中的虚拟路径提供程序只是将路径映射到作为由该路径表示的文件内容的字节流.

相关文章

项目要求通过网站上传大文件,比如视频文件,通过摸索实现了文件分片来上传,然后后台进行合并。 使用了...
安装新版本的Nginx(vim /etc/yum.repos.d/nginx.repo) [nginx-stable] name=nginx stable repo baseu...
什么是 SignalR&#160;ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功...
在Windows下使用Docker,我们选择Docker Desktop这个软件,非常方便。 ## Docker Desktop介绍及安装 Do...
项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求...
银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云计算、大数据、工业互联网时代对主...