2012-05-03 29 views
7

我想用下面的剃刀模板,RazorEngineRazorEngine - 利用佈局Html.Raw

@{ 
    Layout = null; 
} 

@Html.Raw(MyNamespace.MyClass.SomePropertyWithHtml) 

當我把它叫做我得到2個錯誤 - 一個抱怨它不能處理版式,另一個抱怨說它不知道如何處理Html幫手。

這裏還有其他問題和答案,建議在v3中這是可行的,而且我正在使用NuGet上的當前軟件包 - v3.0.8 - 但目前尚不清楚這是如何完成的。目前我調用它像這樣:

string html = RazorEngine.Razor.Parse(File.ReadAllText(path)); 

其他答案建議使用Razor.SetBaseTemplate第一,它不會出現在電流源或混帳的3.0分支。看代碼,我看到代碼引用佈局和部分,但佈局代碼似乎依賴於通過名稱解析模板,而我試圖做甚至不需要解析模板 - 我只是需要它來應付Layout = null。該代碼還包括一個MvcTemplateBase,它似乎在Web項目中提供了一個HtmlHelper - 但它是該項目中的唯一類,並未在Web或Core項目中的任何位置引用。

這類似的問題: RazorEngine issues with @Html

只是鏈接到網頁上說,你可以找到更多有 - 網頁僅僅是描述項目的短句。

那麼,如何用RazorEngine v3.0解析上述Razor視圖?

+0

噢,你正在使用RazorEngine ...有一點需要記住的是Razor不是MVC。新的RazorEngine已經完成了很多工作,但Antaris最近真的很忙。您應該可以在文件頂部使用'@inherits MvcTemplateBase '來使用它。 – Buildstarted

+2

感謝您的建議。我意識到Razor和MVC是分開的,但我的目標是在正常的ASP.Net管道內外使用相同的MVC Razor模板。 NuGet上的版本不包含名爲MvcTemplateBase的類。 Git的最新版本確實如此,但它不是通用的 - 它只是MvcTemplateBase。如果我添加一行像@inherits RazorEngine.Razor.MvcTemplateBase我在TemplateService.SetModelExplicit中得到一個異常,抱怨模板類型沒有名爲Model的屬性。想法? –

回答

2

Layout屬性和Html幫手都沒有的TemplateBase的一部分,和MvcTemplateBase實施是的RazorEngine(V3.4.1)最新版本的一部分不完整的出現(InitHelpers似乎沒有初始化助手?)。您需要創建自己的基本模板來實現這些功能。

如您所述,v3 +版本不包含Razor.SetBaseTemplate方法。您可以在當前版本中設置一個基本模板類型,像這樣:

var config = new RazorEngine.Configuration.TemplateServiceConfiguration 
    { 
     BaseTemplateType = typeof(MyTemplateBase<>) 
    }; 

using (var service = new RazorEngine.Templating.TemplateService(config)) 
{ 
    Razor.SetTemplateService(service); 
    return MvcHtmlString.Create(Razor.Parse<TModel>(templateText, model)); 
} 

你應該需要初始化助手,它可能有助於自定義實現的IActivator,它可以提供給TemplateServiceConfiguration像覆蓋CreateInstanceBaseTemplateType

var config = new RazorEngine.Configuration.TemplateServiceConfiguration 
    { 
     BaseTemplateType = typeof(MyTemplateBase<>), 
     Activator = new MyActivator() 
    }; 
+0

嗯你正在使用哪個版本的RazorEngine?或者你是否將MvcTemplateBase作爲你自己的類來派生?當前的源代碼沒有MvcTemplateBase的通用版本:https://github.com/Antaris/RazorEngine/blob/master/src/Web/RazorEngine.Mvc/MvcTemplateBase.cs –

+0

這是MvcTemplateBase的本土實現。上面的要點是證明你仍然可以*設置一個基本模板來繼承你的所有視圖,這將允許你實現Html幫助器,基本佈局功能,或者你應該需要的任何RazorEngine的TemplateBase不提供開箱即用。 – jdmcnair

+0

澄清了我上面的答案。我之前注意到這個問題已經超過2年了,但我認爲這仍然可以回答。如果有什麼不清楚,請告訴我。也許這仍然會幫助別人。 – jdmcnair