【问题标题】:Render ASP.NET Core Razor markup from an argument从参数渲染 ASP.NET Core Razor 标记
【发布时间】:2016-11-16 21:26:01
【问题描述】:

在 ASP.NET Core 之前,我可以将 Razor 标记作为参数传递给某个函数。但是,它似乎不再起作用了。

例如,即使是这些简单的情况也不会渲染:

@{
  Func<object, HelperResult> markup1 = @<text>hello world</text>;
  new HtmlString(markup1.Invoke(null).ToString());

  Func<object, HelperResult> markup2 = @<h1>hello world</h1>;
  new HtmlString(markup2.Invoke(null).ToString());
}

我做错了什么?

【问题讨论】:

  • “它什么都不渲染” - 所以它至少可以编译/构建?
  • @Dai 编译运行,没有错误。但该标记并未呈现。

标签: c# asp.net razor asp.net-core


【解决方案1】:

这不会呈现任何结果,因为您没有对结果做任何事情。

@{
  Func<object, HelperResult> markup = @<text>hello world</text>;
  new HtmlString(markup.Invoke(null).ToString());
}

在表达式new HtmlString(markup.Invoke(null).ToString()); 中返回一个正确的 HTML 结果,但是您调用它的方式将无法正常工作。这是一个将打印结果的 sn-p。

@{

    Func<object, HelperResult> markup = @<text>hello world</text>;
    var html = markup.Invoke(null);
    await html.WriteAction(ViewContext.Writer);
}

您会注意到这里我们明确告诉 html 变量 (HtmlResult) 写入的位置。在这种情况下,您需要写信给ViewContext.Writer,即System.IO.TextWriter

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 2019-02-03
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多