gpt4 book ai didi

razor - 如何使用缩进和换行自动设置 Razor 输出格式?

转载 作者:行者123 更新时间:2023-12-02 13:34:39 35 4
gpt4 key购买 nike

我有一些 Razor 页面,其中包含大量条件逻辑、循环、部分 View 等。保持输出标记在语义上正确很容易,但使用正确的缩进和换行符对其进行格式化则更困难。我怎样才能在运行时自动执行此操作?有模块或 Razor 扩展吗?

请不要说右键单击 -> 格式选择。需要明确的是,我希望在编写 Razor 页面时避免考虑格式化。我希望我的 Razor 标记以对开发人员有意义的方式进行布局(例如,在服务器端 block 内缩进),但渲染的 HTML 对于单击“查看源代码”的奇怪人来说是“美化的”。 (我不担心增加输出的大小,因为我使用的是 gzip/deflate。)

最佳答案

您可以使用像 TidyNet ( http://sourceforge.net/projects/tidynet/ ) 这样的库来实现 ActionFilter:

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResult)
{
var tidy = new Tidy
{
Options =
{
DocType = DocType,
DropFontTags = DropFontTags,
LogicalEmphasis = LogicalEmphasis,
XmlOut = XmlOut,
Xhtml = Xhtml,
IndentContent = IndentContent,
HideEndTags = HideEndTags,
MakeClean = MakeClean,
TidyMark = TidyMark,
}
};

filterContext.RequestContext.HttpContext.Response.Filter =
new HtmlTidyFilter(filterContext.RequestContext.HttpContext.Response.Filter, tidy);
}
}

过滤器的算法:

public override void Write(byte[] buffer, int offset, int count)
{
var data = new byte[count];
Buffer.BlockCopy(buffer, offset, data, 0, count);
string html = Encoding.Default.GetString(buffer);

using (var input = new MemoryStream())
{
using (var output = new MemoryStream())
{
byte[] byteArray = Encoding.UTF8.GetBytes(html);
input.Write(byteArray, 0, byteArray.Length);
input.Position = 0;
_tidy.Parse(input, output, new TidyMessageCollection());

string result = Encoding.UTF8.GetString(output.ToArray());

byte[] outdata = Encoding.Default.GetBytes(result);
_stream.Write(outdata, 0, outdata.GetLength(0));
}
}
}

然后你只需将其插入 Controller 即可:

[TidyHtml]
public class AnyController : Controller

瞧! ;)

我从这个来源学到的:http://blog.aquabirdconsulting.com/2009/10/28/asp-net-mvc-clean-html/

关于razor - 如何使用缩进和换行自动设置 Razor 输出格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10454165/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com