2011-06-02 48 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)

相关问题