Razor Helper语法自动格式化丑陋。怎么修?

时间:2011-06-23 19:57:13

标签: visual-studio syntax formatting razor

所以我对Visual Studio格式化剃刀代码的方式有了一定的了解。我一直有一些与visual studio有关的问题以及它如何格式化UI代码,它似乎总是做一个真正的超级糟糕的工作,业界不想跟随。

所以这个例子看起来真的很愚蠢。我正在试图弄清楚是否有mods或方法来解决这个问题。它看起来真的很糟糕。

有人对此有所了解吗?洛尔

@using Company.Mobile2.Enums
@helper BidsByShipment(string generatedId, int bidsCount, int activeBidsCount)
    {
        if (bidsCount > 0)
        {
    <a class="Company-listview-link Company-listview-bids" href="/Shipping/Bids/ByShipment?id={0}">
        @if (activeBidsCount > 0)
        {
            <text>@bidsCount (@activeBidsCount @GetStr("Company"))</text>
        }
        else
        {
            <text>@bidsCount</text>
        }
    </a>
        }
        else
        {
    <text>0 @GetStr("Company")</text>
        }
}

5 个答案:

答案 0 :(得分:4)

显然暂时无法解决这个问题,这是他们在另一个相关问题中回答的问题:Why doesn't Visual Studio code formatting work properly for Razor markup?

答案 1 :(得分:1)

您是否将Visual Studio设置为使用制表符缩进?这揭示了一个Razor格式错误,它应该插入空格而不是标签。解决方法是切换到空格缩进。

答案 2 :(得分:0)

C#代码与HTML代码分开格式化。如果你想要适当的缩进,那么只需将一些无用的包装标签放在任何你想要的缩进处,你就会得到缩进。但这将是一种反模式。

这是代码。对于你已定义的函数,我不确定它是否真的有用。

@using Company.Mobile2.Enums
<div>

@helper BidsByShipment(string generatedId, int bidsCount, int activeBidsCount)
    {
        if (bidsCount > 0)
        {
         <a class="Company-listview-link Company-listview-bids" href="/Shipping/Bids/ByShipment?id={0}">
        @if (activeBidsCount > 0)
        {
            <text>@bidsCount (@activeBidsCount @GetStr("Company"))</text>
        }
        else
        {
            <text>@bidsCount</text>
        }
        </a>
        }
        else
        {
         <text>0 @GetStr("Company")</text>
        }
}
<div>

答案 3 :(得分:0)

我为格式化剃刀文档做了扩展。

安装:

1)在扩展中搜索“razor-formatter”

2)按CTRL + P然后输入以下命令并按enter:

ext install Kookweb.razor-formatter

VSCode市场上的链接:

https://marketplace.visualstudio.com/items?itemName=Kookweb.razor-formatter

源于github:

https://github.com/Kookweb-ir/razor-formatter

当然这不是最好的格式化程序,但现在只是格式化程序。

这只是一个适用于剃刀文档的简单HTML美化器。如果有人为此工作并使其完美,我将很高兴。

答案 4 :(得分:-2)

对于所有对Visual Studio抱怨的人来说,我认为它非常令人印象深刻,它允许您在不知道您正在使用哪种语言的情况下在HTML和C#之间切换。

在更实际的说明中,我认为我的建议是结合上面显示的许多内容。具体而言......

  1. 避免使用@:来表示HTML的文字字符串。当您重新格式化代码时,Visual Studio经常在其后面添加一行,即使它没有,您也可以最终进行无限递归,使用@然后切换回代码,依此类推。如上所述,使用 WriteLiteral 表示未在HTML标记中编码的内容;否则Visual Studio将在您使用时检测HTML。如果......
  2. ...您使用在@ {...}块中插入代码的绝妙主意。
  3. 考虑到这两个,我发现CTRL K,D重新格式化代码给表格块提供了完美的结果,这让我很生气:

    <table>
    
    <tr>
        <th>Chapter</th>
        @*<th class="woCoursewareFindTd">Page count</th>*@
        <th>Contents</th>
    </tr>
    
    @{
        foreach (var c in Model.Chapters)
        {
            if (c.Courseware2Id == c2.Courseware2Id)
            {
                <tr>
                    <td>
                        @{
    
                            if (c.ChapterFileName.ToString().ToLower() == "none")
                            {
                                WriteLiteral(c.Courseware3Name);
                            }
                            else
                            {
                                <a href="@c.Href">@c.Courseware3Name (click to download)</a>
                            }
                        }
                        <p>(@c.PageCount page@(c.PageCount == 1 ? "" : "s"))</p>
                    </td>
    
                    <td>
                        @Html.Raw(c.SectionText)
                    </td>
                </tr>
            }
        }
    }
    

    完美!感谢上面的所有StackOverflow贡献者。