2011-12-06 82 views
0

我遇到<text>標記存在問題。由於底部附近的</tr>標籤,下列代碼無法運行。如果我刪除它,它會工作,但它然後打印一個不正確的表。如果我離開它,我會得到以下錯誤:遭遇結束標記「tr」,沒有匹配的開始標記。您的開始/結束標籤是否適當平衡?Mvc 3剃鬚刀,視圖中的文本塊?

我如何告訴剃鬚刀忽略這樣的事情?我也試圖在/ tr周圍添加一個文本標籤,同時也在所有的html代碼周圍添加一個文本標籤,但是會產生這樣的結果:遭遇的結束標籤「文本」沒有匹配的開始標籤。您的開始/結束標籤是否正確平衡?

@{        
int i = 0; 
foreach (var item in Model.Model) 
{ 
    if (i % 2 == 0) 
    { 
     <text><tr class="alternate-row"></text> 
    } 
    else 
    { 
     <text><tr></text> 
    } 

     <td> 
      <input type="checkbox" /> 
     </td> 
     <td> 
      @item.Firstname 
     </td> 
     <td> 
      @item.Surname 
     </td> 
     <td> 
      <a href="">[email protected]</a> 
     </td> 
     <td class="options-width"> 
      <a href="" title="Edit" class="icon-1 info-tooltip"></a><a href="" title="Edit" class="icon-2 info-tooltip"> 
      </a><a href="" title="Edit" class="icon-3 info-tooltip"></a><a href="" title="Edit" 
       class="icon-4 info-tooltip"></a><a href="" title="Edit" class="icon-5 info-tooltip"> 
       </a> 
     </td>   
    </tr> 

}  
}  

更新與另一個問題

爲什麼剃鬚刀甚至測試HTML標籤?

+2

剃刀測試HTML標籤,因爲解析器需要檢測哪個頁面上的元素是剃刀,哪些是純HTML。對待它與標準Web窗體視圖引擎如何與MVC協同工作有很大區別。 –

回答

1

你可以做到這一點

<[email protected] (i % 2 == 0) { <text> class="alternate-row"</text> }> 

,或者你可以設置一個變量,「擁有」你的擴展HTML爲<tr>標籤這樣

int i = 0; 
foreach (var item in Model.Model) 
{ 
    string ext = ""; 
    if (i % 2 == 0) 
    { 
     ext = " class=\"alternate-row\""; 
    } 

    <[email protected]> 
    // ... 

這就是最簡單的辦法,或者你可以創建一個自定義HTML幫手。

的更多信息:Creating Custom HTML Helpers

更新

達林也表示,他會創建一個自定義的HTML幫助。

我也建議,如果你需要這一次以上。

結論

的第一選擇是創建一個HTML幫手,二是用我的第一個 辦法(內嵌if語句),最後用一個變量。

它並不是真的取決於你需要多久,但如果你真的需要 只有一次,選擇第一種方法。 三種解決方案中的每一種都是正確的,其決定取決於您擁有的時間 。

希望這可以幫助你

+0

所以你的意思是沒有其他方法可以解決這個問題? – Patrick

+0

我用另一個解決方案更新了我的答案。 – dknaack

+0

class =「alternate-row」}>工作正常,但仍然感覺有點過於只有一個 – Patrick

0

請從tr標籤周圍的<text>塊的條件

+0

對不起作用,已經嘗試過了。 – Patrick

1
<[email protected](i % 2 == 0 ? " class=\"alternate-row\"" : "")> 
    ... some tds 
</tr> 

但我個人會寫一個自定義的HTML幫助避免這種麪條代碼,並沿着線的東西:

@using (Html.Tr(i)) 
{ 
    <td> 
     <input type="checkbox" /> 
    </td> 
    <td> 
     @item.Firstname 
    </td>  
    ... 
} 

我也重構並擺脫foreach循環,並用一個簡單的顯示模板調用:@Html.DisplayForModel()替換它。

1

我有使用JavaScript的替代方法。由於您使用的是MVC3,因此您可能有權訪問jQuery。添加JavaScript的這個小金塊(See jsFiddle Example

$(function() { 
    $('tr:odd').addClass('alternate-row'); 
})