从参数渲染ASP.NET Core Razor标记

时间:2016-11-16 21:26:02

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

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

例如,即使是这些简单的案例也不会产生任何结果:

ByteArrayOutputStream out = new ByteArrayOutputStream();
int counter;
byte[] buffer = new byte[1024]; // Let's read up to 1KB at a time, it's faster
while((counter = is.read(buffer)) != -1)
    out.write(buffer, 0, counter);

// String output = new String(out.toByteArray(), "UTF-8");
String output = out.toString("UTF-8"); // Save an extra byte[] allocation

我做错了什么?

1 个答案:

答案 0 :(得分:2)

这不会渲染任何结果,因为你没有对结果做任何事情。

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

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

@{

    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