【问题标题】:visual studio 2015, resharper, razor and formatting embedded htmlvisual studio 2015,resharper,razor 和格式化嵌入式 html
【发布时间】:2016-04-25 21:01:49
【问题描述】:

我正在使用带有 mvc 应用程序的 resharper 运行 Visual Studio 2015。我有一个视图,我想在其中创建一组嵌套的 div 标记,例如:

<div>
    <label>...
    <div>
        <label>...
        <label>...
        <label>...
    </div>
    <div>
        <div>
            <label>...
            <label>...
        </div>
        <label>...
        <label>...
    </div>
</div>

我有类似的代码

<div class="content">
    @{
        var count = 0;
        var depthList = new Stack<int>();

        <text>
            <div class="NestedSelect">
        </text>

    foreach (var category in Model.OrderBy(m => m.LeftLink)) {
        if (depthList.Count == 0) {
            depthList.Push(category.Depth);

            <text>
                <label>
                    <input type="radio" name="categories" value="@category.Id"><span>@category.Name</span>
                </label>
            </text>
        } else if (category.Depth > depthList.Peek()) {
            depthList.Push(category.Depth);

            <text>
                <div>
                <label>
                    <input type="radio" name="categories" value="@category.Id"><span>@category.Name</span>
                </label>
            </text>
        } else if (category.Depth == depthList.Peek()) {
            <text>
                <label>
                    <input type="radio" name="categories" value="@category.Id"><span>@category.Name</span>
                </label>
            </text>
        } else {
            while (category.Depth < depthList.Peek()) {
        depthList.Pop();
    //@@@@
    <text>
</div>
    </text>
                }

                <text>
                    <label>
                        <input type="radio" name="categories" value="@category.Id"><span>@category.Name</span>
                    </label>

                </text>
            }
            //@@@@
            <text>
                </div>
    </text>

            count++;

            if (count == 0) {
            }
        }
    }
</div>

编辑

注意循环中的 &lt;text&gt;&lt;/div&gt;&lt;/text&gt; 块(标记为 //@@@@)。 VS 和/或 resharper 非常反对我关闭的 div 标签似乎没有伙伴。开始的&lt;text&gt; 标记在编辑器中突出显示,但结尾的&lt;/text&gt; 标记没有。它们有一个错误下划线和工具提示“结束标记缺少匹配的开始标记”。

我曾尝试使用 @: 构造,但是当代码被格式化时,它会将 @: 单独放在一行上,然后与裸 html 标记混淆。

如何用这个构建嵌套的 html 结构?

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

    @: 结构应该按照你的建议在这里使用,但只能在导致问题的标签上使用。

    试试这样的:

    <div class="content">
    @{
        var count = 0;
        var depthList = new Stack<int>();
    
        <text>
            <div class="NestedSelect">
        </text>
    
        foreach (var category in Model.OrderBy(m => m.LeftLink))
        {
            if (depthList.Count == 0)
            {
                depthList.Push(category.Depth);
    
                <text>
                    <label>
                        <input type="radio" name="categories" value="@category.Id"><span>@category.Name</span>
                    </label>
                </text>
            }
            else if (category.Depth > depthList.Peek())
            {
                depthList.Push(category.Depth);
    
                @:<div>
                    <text>
                            <label>
                                <input type="radio" name="categories" value="@category.Id"><span>@category.Name</span>
                            </label>
                    </text>
            }
            else if (category.Depth == depthList.Peek())
            {
                <text>
                    <label>
                        <input type="radio" name="categories" value="@category.Id"><span>@category.Name</span>
                    </label>
                </text>
            }
            else
            {
                while (category.Depth < depthList.Peek())
                {
                    depthList.Pop();
                    @:</div>
                }
    
                <text>
                    <label>
                        <input type="radio" name="categories" value="@category.Id"><span>@category.Name</span>
                    </label>
    
                </text>
            }
                @:</div>
    
            count++;
    
            if (count == 0)
            {
            }
        }
    }
    

    【讨论】:

    • 谢谢。这确实有效,直到重新进行“代码清理”。这仍然通常将@: 放在自己的行上,而将可能被转义的标签裸露在外。
    【解决方案2】:

    如果您不沉迷于格式化,则应该使用@: 构造。

    @: </div>
    

    如果是,请考虑使用WriteLiteral

    WriteLiteral("</div>");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 2015-09-03
      相关资源
      最近更新 更多