Javascript ASP.NETMVC:Razor-如何在不向浏览器发送大量空白的情况下保持代码的良好缩进
我正在使用razor渲染javascript对象,如下面的代码片段所示Javascript ASP.NETMVC:Razor-如何在不向浏览器发送大量空白的情况下保持代码的良好缩进,javascript,asp.net-mvc,performance,razor,Javascript,Asp.net Mvc,Performance,Razor,我正在使用razor渲染javascript对象,如下面的代码片段所示 @{ bool isFirst = true; foreach (var qa in Model.Form.FormItems) { if (isFirst) { isFirst = false; } else { @:, } @:new Q
@{
bool isFirst = true;
foreach (var qa in Model.Form.FormItems)
{
if (isFirst)
{
isFirst = false;
}
else
{
@:,
}
@:new QuestionAndAnswer(
@:@(qa.QuestionAnswerId),
@:@(qa.OrderNumber),
@:@(qa.ParentOrderNumber),
@:@(qa.IsHeader.ToJsonValue()),
@:@(qa.IsMandatory.ToJsonValue()),
@:@(qa.IsAlertable.ToJsonValue()),
@:@(qa.IsAlarmable.ToJsonValue()),
@:@(qa.IsKeyItem.ToJsonValue()),
@:@(qa.IsHiddenQuestion.ToJsonValue()),
@:new Question(
@:@(qa.Question.QuestionId),
@:@Html.Raw(qa.Question.IdCode.ToJsonValue()),
@:new OverridableFormItemText(
@:@(qa.Question.ItemText.DefaultFormItemTextId),
@:@Html.Raw(qa.Question.ItemText.DefaultText.ToJsonValue()),
@:@Html.Raw(qa.Question.ItemText.DefaultHelpText.ToJsonValue()),
..etc...
这使我的cshtml页面易于阅读,布局良好
不幸的是,所有的缩进都呈现在浏览器上,使得页面比需要的大4倍左右。html的示例代码段:
new QuestionAndAnswer(
34500,
2,
1,
false,
false,
false,
false,
false,
false,
new Question(
33955,
"123",
new OverridableFormItemText(
23879,
"Locality",
"",
null,
"",
""
)
),
new Answer(
22196,
"321",
4,
"MultipleChoiceSingleSelect",
是否有办法保留格式良好的服务器端代码,但向浏览器发送一个无格式版本(即无缩进)以节省带宽?在IIS中启用动态内容压缩,空白将在那里,但会压缩得很好。您可以重新构造Razor代码,这样就不会在每一行中插入或退出。大概是这样的:
@{
bool isFirst = true;
}
@foreach (var qa in Model.Form.FormItems)
{
@(isFirst ? "" : ",")
@{
if (isFirst)
{
isFirst = false;
}
}
@* Everything from here on will be rendered as-is in the browser *@
new QuestionAndAnswer(
@(qa.QuestionAnswerId),
...
}
这里是压缩代码
protected void Application_BeginRequest(object sender, EventArgs e)
{
// Implement HTTP compression
HttpApplication app = (HttpApplication)sender;
// Retrieve accepted encodings
string encodings = app.Request.Headers.Get("Accept-Encoding");
if (encodings != null)
{
// Check the browser accepts deflate or gzip (deflate takes preference)
encodings = encodings.ToLower();
if (encodings.Contains("deflate"))
{
app.Response.Filter = new DeflateStream(app.Response.Filter, CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "deflate");
}
else if (encodings.Contains("gzip"))
{
app.Response.Filter = new GZipStream(app.Response.Filter, CompressionMode.Compress);
app.Response.AppendHeader("Content-Encoding", "gzip");
}
}
}
检查这个答案,谢谢。这是一个选项,但会影响标记的可读性。我已在中添加了我的最终解决方案作为答案。