【问题标题】:RazorEngine v2.1 throwing "Object is null" exception on Razor.ParseRazorEngine v2.1 在 Razor.Parse 上抛出“Object is null”异常
【发布时间】:2012-01-20 18:10:27
【问题描述】:

我的模板如下所示:

@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 调用中得到一个空异常,即使输入不为空,“原始”和提供的模型都已初始化并具有值。

编辑以纠正示例中的小编码错误。

【问题讨论】:

    标签: razorengine


    【解决方案1】:

    MvcTemplateBase&lt;T&gt;类型还没有开发,你现在使用的版本是很早期的未完成版本。

    我会质疑您为什么要尝试在 MVC Razor 视图中运行 RazorEngine 模板?

    【讨论】:

    • 我实际上并没有从 MVC 应用程序运行它。这是一个动态编译的模板,用于从后端服务生成电子邮件和消息。我正在考虑重新考虑这一点,只需部署一个单独的 MVC 消息传递应用程序来将其作为服务处理。
    • 但我的问题是,您为什么要尝试从模板中运行模板? MvcTemplateBase&lt;T&gt; 类型被设计为与 MVC 兼容的模板类​​型,用于 MVC 环境。
    • 好吧,我开始用很长的详细回答“我不这样做......这就是我正在做的事情。”简短的回答是我实际上并没有这样做。此代码不再存在于我的代码库中。我猜这是在我正在做的研究高峰上发布的一个问题。我已经解决了我试图在没有任何此代码的情况下解决的问题。当时试图解决的问题是我需要将数据库中的基本上静态的 html 插入到模板中。此功能允许客户在特定于其站点部署的页面中配置内容的某些方面。
    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 2021-07-12
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多