gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:02:12 25 4
gpt4 key购买 nike

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

如果是真的怎么办?

基本上实现自定义VirtualPathProvider是没有问题的这将加载
从任何地方查看,但我的实现只能在 MVC 2.0 中工作,而不能在 MVC 3.0 中工作,出于某种原因方法 GetFile较新的在 MVC 3.0 中要求不存在的 View ,在这种情况下,我得到“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 时紧随 AreaRegistration.RegisterAllAreas();RegisterRoutes(RouteTable.Routes);方法方法 override VirtualFile GetFile(string virtualPath)不适用于“虚拟 View ”。

更新 2

这是否意味着类 RazorViewRazorViewEngineRender答案是什么?

更新 3

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

例如,我的 View 的字符串表示形式如下所示:
"@{
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()不会执行我收到一个错误:方法或操作未实现(堆栈跟踪: http://tinypic.com/r/dcow4/7)

为了使“public override T Model”发生,我确实在“public abstract class TemplateBase: TemplateBase, ITemplate”中将“public TModel Model”的声明更改为“public virtual TModel Model”。可能还有一些其他的改变应该做吗?或 HtmlTemplateBase<T> 中的内容应该换一种方式吗?

最佳答案

不要被 Ben (@BuildStarted) 文章中的示例代码所迷惑。他正在详细介绍如何使用 Razor ViewEngine 的早期版本来呈现模板,而无需使用 Controller 操作。其目的是能够以通用方式呈现模板,而不是作为特定的页面 View 。 (这就是我们的 RazorEngine 模板框架 @ http://razorengine.codeplex.com 的演变)。
VirtualPathProvider仍然是 ASP.NET 的核心部分。关于 MVC 3 的 DependencyResolver 似乎普遍存在混淆。作为 VirtualPathProvider 的替代品但事实并非如此,您仍然需要提供者能够访问虚拟路径上的内容(顺便说一下,ASP.NET 中的所有路径都是虚拟的)。

恢复我原来的答案,你应该能够纯粹通过继承 RazorViewEngine 来实现你想要的。并使用它来创建您的 View 。

看看这个话题:http://coderjournal.com/2009/05/creating-your-first-mvc-viewengine/

关于asp.net-mvc-3 - ASP.NET MVC 3.0 Razor,从任何地方开箱即用加载 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4731531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com