将Razor视图渲染为导致额外格式标记(制表符、换行符)的字符串?如何删除

本文关键字:换行符 制表符 删除 何删除 字符串 视图 Razor 格式 | 更新日期: 2023-09-27 18:24:56

我在另一篇文章中提出了这个问题作为评论,但无法解决。我使用的是RenderRazorViewToString()方法,但不知何故,返回的JSON获得了Visual studio的所有格式(制表符、空格、换行符等),以下是我所做的:

public virtual ActionResult RenderToString()
{
    var html = RenderRazorViewToString(MVC.Markets.Views._RenderToString);
    return Json(new { html = html }, JsonRequestBehavior.AllowGet);
}

以下是返回的结果:

{"html": "<div class='"frame company-quote contain'" data-module-name='"FirstGlanceModule'">'r'n't<div data-module-name='"CompanyHeaderModule'">'r'n't't<h1>'r'n't't'tMicrosoft Corp <em>(MSFT:NASDAQ)</em></h1>'r'n't</div>'r'n't<div class='"first-glance'" data-module-name='"FirstGlanceQuoteModule'">'r'n't't<table>'r'n't't't<thead>'r'n't't't't<tr>'r'n't't't't't<th>'r'n't't't't't'tPrice'r'n't't't't't</th>'r'n't't't't't<th>'r'n't't't't't'tChange'r'n't't't't't</th>'r'n't't't't't<th>'r'n't't't't't'tVolume'r'n't't't't't</th>'r'n't't't't't<th>'r'n't't't't't'tMarket Cap'r'n't't't't't</th>'r'n't't't't</tr>'r'n't't't</thead>'r'n't't't<tbody>'r'n't't't't<tr>'r'n't't't't't<td>'r'n't't't't't't$30.13'r'n't't't't't</td>'r'n't't't't't<td>'r'n't't't't't't<span class='"neg'">-0.13</span>'r'n't't't't't</td>'r'n't't't't't<td>'r'n't't't't't't32.75 M'r'n't't't't't</td>'r'n't't't't't<td>'r'n't't't't't't$252.77 B'r'n't't't't't</td>'r'n't't't't</tr>'r'n't't't</tbody>'r'n't't</table>'r'n't</div>'r'n't<div class='"controls'" data-module-name='"FirstGlanceControlsModule'">'r'n't't<em>Data as of February 15, 2012 01:59:59 PM ET</em>'r'n't't<div>'r'n't't't<button class='"type-1'">'r'n't't't't<span>Add to Watchlist</span></button>'r'n't't't<button class='"type-2'">'r'n't't't't<span>Trade</span></button>'r'n't't</div>'r'n't</div>'r'n</div>'r'n"}

我试着添加了一个扩展方法,在这里列出了用Formatting将其重新格式化为xml。没有,结果稍微好一点,但仍然有额外的标记以及我可能不想要的xml版本标记:

{"html": "<?xml version='"1.0'" encoding='"utf-16'"?><div class='"frame company-quote contain'" data-module-name='"FirstGlanceModule'"><div data-module-name='"CompanyHeaderModule'"><h1>'r'n't't'tMicrosoft Corp <em>(MSFT:NASDAQ)</em></h1></div><div class='"first-glance'" data-module-name='"FirstGlanceQuoteModule'"><table><thead><tr><th>'r'n't't't't't'tPrice'r'n't't't't't</th><th>'r'n't't't't't'tChange'r'n't't't't't</th><th>'r'n't't't't't'tVolume'r'n't't't't't</th><th>'r'n't't't't't'tMarket Cap'r'n't't't't't</th></tr></thead><tbody><tr><td>'r'n't't't't't't$30.13'r'n't't't't't</td><td><span class='"neg'">-0.13</span></td><td>'r'n't't't't't't32.75 M'r'n't't't't't</td><td>'r'n't't't't't't$252.77 B'r'n't't't't't</td></tr></tbody></table></div><div class='"controls'" data-module-name='"FirstGlanceControlsModule'"><em>Data as of February 15, 2012 01:59:59 PM ET</em><div><button class='"type-1'"><span>Add to Watchlist</span></button><button class='"type-2'"><span>Trade</span></button></div></div></div>"}

你知道怎么做吗?谢谢

将Razor视图渲染为导致额外格式标记(制表符、换行符)的字符串?如何删除

根据这个SO问题,字符串似乎有问题。替换和大字符串,因为它们是不可变的,但是StringBuilder即使在大字符串上也应该能很好地工作。

public virtual ActionResult RenderToString()
{
    string html = RenderRazorViewToString(MVC.Markets.Views._RenderToString);
    html = new StringBuilder(html)
        .Replace("'n","")
        .Replace("'r","")
        .Replace("'t","")
        .ToString();
    return Json(new { html = html }, JsonRequestBehavior.AllowGet);
}

根据需要添加任何其他空白字符。

由于视图应该返回有效的XML,您可以尝试使用以下内容:

public virtual ActionResult RenderToString()
{
    var html = RenderRazorViewToString(MVC.Markets.Views._RenderToString);
    string clean = XElement.Parse(html).ToString(SaveOptions.DisableFormatting);
    return Json(new { html = clean }, JsonRequestBehavior.AllowGet);
}

或者在SO 上还有另一个整洁的选项