[英]Render Razor View as string resulted in extra formatting tags (tabs, line-breaks)? How to remove?
我已经问过这个问题,作为对另一篇文章的评论,但无法使其正常工作。 我正在使用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.None将其重新格式化为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>"}
对如何进行这项工作有任何想法吗? 谢谢。
基于这个SO问题 ,看来string.Replace和大字符串存在问题,因为它们是不可变的,但是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上还有另一个整洁的选择
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.