.NET - 在MVC应用程序之外的Razor - 删除@inherits和提供@model的问题

时间:2011-05-10 14:08:09

标签: .net razor buildprovider

很抱歉这个问题很长。我把它分成了三个问题,可以单独阅读。如果你能帮我解决一个问题,请做!

我有一个Razor引擎的自定义实现。所有工作和模板都已编译并可以使用。手头有一些实现涉及一个具有通用Model属性的基类,允许强类型视图(模板)。此时我正在使用@inherits指令来定义基类,它是泛型类型。

GVS在这里做出的回答(Hosting the Razor View engine using a view model),他说使用@model实际上是@inherits Class<ModelType>的简写,这让我觉得两者可以互换,但这不是情况下。

这是我的模板

@inherits RazorEngine.TemplateBase<MyProject.TestModel>
@functions {

}
<h1>@Model.TestProperty

收藏

  1. 删除@inherits指令
  2. 添加@model指令
  3. 问题


    当前情况:可以使用所有内容编译和模板。但是我在@inherits指令处有一个intellisense错误。:

      

    没有为扩展名“.cshtml”注册buildprovider。您可以在machine.config或web.config中注册一个。

    这里有什么问题?

    我在views文件夹中有一个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不可见,因此会导致错误=&gt; 回答/解决方案是实施愿望清单#2?


    愿望清单#2: 添加@model指令会在@Model.TestProperty上引发intellisense错误(即使将@inherits指令保留在原位......):

      

    当前上下文中不存在名称Model。

    额外信息:

    我正在使用以下代码从已编译的程序集中实例化模板。

    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;
    

1 个答案:

答案 0 :(得分:1)

  1. 您可以添加对System.Web.WebPages.Razor.dll的引用(在<assemblies>中) [PreApplicationStartMethod]中的It registers the RazorBuildProvider

  2. the @model directive is unique to MVC
    您需要使用MvcRazorEngineHost