假设我有System.Web.Mvc.HtmlHelper<T>
的以下自定义扩展程序:
public static MvcHtmlString WrapInDiv<TModel, TValue>(this HtmlHelper<TModel> html, String text)
{
String htmlRaw = String.Format("<div>{0}</div>", text);
var xDoc = XDocument.Parse(htmlRaw); // For formatting
return new MvcHtmlString(xDoc.ToString());
{
..我在这个视图片段中使用它:
<span>
@Html.WrapInDiv("sasuage")
</span>
结果如下:
<span>
<div>
Sausage
</div>
</span>
因为XDocument
作者显然不知道我们已经在一个包含四个字符缩进的部分。我可以用任何方式解决这个问题,以便我的HTML帮助程序打印出完美缩进的多行HTML格式吗?
答案 0 :(得分:1)
为什么要保持缩进正确?浏览器不关心,这是一项很多工作,也是一个非常难以解决的问题,特别是在你做助手而没有整个环境时。
最好的方法,如果你真的,真的需要可视化格式的输出,那就是使用HTTP模块生成的每个页面全局地执行它,该模块拦截答案,并且可能是Html Tidy的.Net端口之一。
public class HtmlTidyModule: IHttpModule
{
private EventHandler ReleaseRequestStateEvent = null;
public void Dispose()
{
if (ReleaseRequestStateEvent != null)
context.ReleaseRequestState -= ReleaseRequestStateEvent;
}
public void Init(HttpApplication context)
{
ReleaseRequestStateEvent = new EventHandler(event_ReleaseRequestState);
context.ReleaseRequestState += ReleaseRequestStateEvent;
}
void event_ReleaseRequestState(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
// You need to implement HtmlTidyFilter to handle the response
app.Response.Filter = new HtmlTidyFilter(app.Response.Filter)
}
}
但你必须问问自己,你真的想这样做吗?浏览器中大多数集成的HTML查看器/检查器都已经这样做了(我相信在chrome / FF中为F12)。