2011-06-02 46 views
3

我在我的一個視圖中有一段Razor代碼,其行爲並不像我期望的那樣。有問題的代碼包含多個位置,我需要將模型中的變量值添加到html屬性中。下面的代碼是我的頁面上標記的略微簡化版本(我刪除了一些對此示例不重要的標記「噪聲」,並且使代碼更難閱讀)。爲什麼Razor在某些情況下不識別變量而沒有將其包含在括號中?

有三種情況我使用@topic.StandardTopicId。第一個和第二個實例被替換爲我所期望的,但第三個實例name="[email protected]"呈現而不替換該變量。

代碼的問題:

@foreach(var topic in Model.Group) { 
    <div id="[email protected]" class="topic-frame"> 
     <label> 
      <input type="radio" name="[email protected](topic.StandardTopicId)" /> 
      No 
     </label> 
     <label> 
      <input type="radio" name="[email protected]" /> 
      Yes 
     </label> 
    </div> 
} 

樣品從上面的代碼塊的輸出:

... 
<div id="frame-42" class="topic-frame"> 
    <label> 
     <input type="radio" name="IsCovered_42" /> 
     No 
    </label> 
    <label> 
     <input type="radio" name="[email protected]" value="No" /> 
     Yes 
    </label> 
</div> 
... 

任何人都可以解釋爲什麼變量的最後一個實例沒有被替換,取而代之是按原樣呈現?

回答

5

這裏的剃刀語法參考:C# Razor Syntax Quick Reference

最有可能的,剃鬚刀認爲[email protected]一個有效的電子郵件地址格式,因此它留下原樣。

+1

啊,打我吧,我知道這是類似的東西,但無法找到參考! – Davy8 2011-06-02 19:26:18

+0

謝謝,就是這樣。我忘記了電子郵件的事情。如果我將下劃線更改爲短劃線以使其成爲'IsCovered- @ topic.StandardTopicId',則剃刀會很好地拾取它,因爲它無法將文本用破折號識別爲電子郵件。 – Hamman359 2011-06-02 21:21:46

6

剃刀不會在字中間分析「@」。下劃線被視爲單詞的一部分而不是破折號。使用@()在文字中放置Razor代碼。 @(topic.StandardTopicId)

相關問題