2012-01-20 40 views
1

例外,我的模板看起來是這樣的:RazorEngine V2.1投擲 「對象爲空」 的Razor.Parse

@using RazorEngine; 
@model System.String 
@{ 
    var content = @"<div id=""text-block-container""> 
      @Html.Raw(""<h1>test</h2>"") 
    </div>"; 
    Razor.SetTemplateBase(typeof(MvcTemplateBase<>)); 

    var output = Razor.Parse<MyType>(content, new MyType()); 
} 
<div> 
    @Html.Raw(output) 
</div> 

的MvcTemplateBase樣子:

public abstract class MvcTemplateBase<T> : TemplateBase<T> { 
    public HtmlHelper<object> Html { get; private set; } 
    public UrlHelper Url { get; private set; } 

    public void InitHelpers() { 
     var httpContext = new HttpContextWrapper(HttpContext.Current); 
     var handler = httpContext.CurrentHandler as MvcHandler; 
     if (handler == null) 
      throw new InvalidOperationException("Unable to run template outside of ASP.NET MVC"); 
    } 

編輯的標題:我想通了什麼導致「清除」未定義的錯誤。我有我自己的TemplateBase版本定義,這是命名空間的版本。因爲我沒有在我的實現中定義一個導致錯誤的Clear方法。

現在我在Razor.Parse調用中得到一個空的異常,即使輸入不爲空,'raw'和提供的模型都被初始化並且具有值。

編輯以糾正示例中的小編碼錯誤。

回答

1

MvcTemplateBase<T>類型尚未開發,您目前使用的版本是非常早期的未完成版本。

我會質疑你爲什麼試圖在MVC Razor視圖中運行RazorEngine模板?

+0

我實際上並沒有從MVC應用程序運行這個。這是一個動態編譯的模板,用於從後端服務生成電子郵件和消息。我正在考慮重新考慮這一點,只是部署一個單獨的MVC消息應用程序來處理這個服務。 – Mike

+0

但我的問題是,你爲什麼試圖從模板內運行模板? 'MvcTemplateBase '類型被設計爲MVC兼容的模板類​​型,用於MVC環境。 –

+0

好吧,我開始用一個詳細的答案回答:「我沒有這樣做......這就是我正在做的事情。」簡短的回答是我實際上並沒有這樣做。此代碼不再存在於我的代碼庫中。我猜這是在我正在做的研究峯會上發佈的一個問題。我已經解決了我試圖解決的問題,而沒有任何此代碼。問題是當時試圖解決的是我需要從數據庫中插入基本上靜態的html到模板中。此功能允許客戶在特定於其站點部署的頁面中配置內容的某些方面。 – Mike