Javascript ASP.NETMVC:Razor-如何在不向浏览器发送大量空白的情况下保持代码的良好缩进

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

我正在使用razor渲染javascript对象,如下面的代码片段所示

@{
    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");
            }
        }
    }

检查这个答案,谢谢。这是一个选项,但会影响标记的可读性。我已在中添加了我的最终解决方案作为答案。