2016-04-25 81 views
0

我正在使用mvc應用程序的resharper運行visual studio 2015。我有,我想創建一個組嵌套div標籤的查看,一拉:visual studio 2015,resharper,剃刀和格式化嵌入式html

<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> 

編輯

通知的靠不住<text></div></text>塊(標記爲//@@@@)。 VS和/或resharper都非常明顯,我的關閉div標籤似乎沒有隊友。開頭<text>標籤在編輯器中突出顯示,但結尾</text>標籤沒有。他們有一個錯誤下劃線和工具提示「結束標記缺少匹配的開始標記」。

我嘗試過使用@:構造,但是當代碼格式化時,它將@:放在一行上,然後與裸體html標記混淆。

如何用這個構建嵌套的html結構?

回答

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) 
     { 
     } 
    } 
} 

+0

感謝。這主要是工作,直到resharper「代碼清理」。這仍然通常會將'@:'放在自己的行上,而將裸露的標籤隱藏起來。 –

1

您應該使用@:構造,如果你不與格式癡迷。

@: </div> 

如果是,可以考慮使用WriteLiteral

WriteLiteral("</div>");