对不起,很长的问题。我把它分成三个问题,可以单独阅读。如果你能帮我解决一个问题,请做!
我有一个 Razor 引擎的自定义实现。所有作品和模板都经过编译,可以使用。手头有一些实现,它涉及具有通用Model
属性的基类,该属性允许强类型视图(模板)。在这一点上,我使用@inherits
指令来定义基类,它是泛型类型。
GVS 在这里给出的答案(Hosting the Razor View engine using a view model),他说 using@model
实际上是简写,@inherits Class<ModelType>
让我认为两者可以互换,但事实并非如此。
这是我的模板
@inherits RazorEngine.TemplateBase<MyProject.TestModel>
@functions {
}
<h1>@Model.TestProperty
愿望清单
- 删除
@inherits
指令 - 添加
@model
指令
问题
当前情况:一切都可以编译并且可以使用模板。但是,我在@inherits
指令中有一个智能感知错误。:
没有为扩展“.cshtml”注册 buildprovider。您可以在 machine.config 或 web.config 中注册一个。
这里有什么问题?
我在视图文件夹中有一个 web.config,如下所示:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
<system.web>
<compilation targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</assemblies>
</compilation>
</system.web>
</configuration>
使用愿望清单#1:
删除@inherits
指令会使基类的.Model
属性对 Visual Studio 不可见,因此导致错误 =>答案/解决方案是实现愿望清单#2?
使用愿望清单#2:
添加@model
指令会引发智能感知错误@Model.TestProperty
(即使将@inherits
指令留在原处......):
当前上下文中不存在名称模型。
额外信息:
我正在使用以下代码从已编译的程序集中实例化模板。
var template = (RazorTemplateBase<TModel>)Container.CompiledTemplates.CreateInstance("MyNamespace." + entry.TemplateName + "Template");
template.Model = model;
template.DataSource = dataSource;
template.Execute();
var output = template.Buffer.ToString();
template.Buffer.Clear();
return output;