2011-11-07 177 views
2

我试图为输入创建一个id通过执行以下操作MVC3剃刀级联问题

id="@ViewData.ModelMetadata.ContainerType.Name + "_" + @ViewData.TemplateInfo.GetFullHtmlFieldId("FromDate")" 

,但它是未来通过与ID =“PROPERTYNAME +”。如何在剃刀视图中将两者连同中间的下划线连接起来?

回答

4

可以使用@(expression)语法来表达一个明确的代码表达式。

您需要在此明确指出,因为@ViewData.ModelMetadata.ContainerType.Name之后的空格对于C#标识符而言不是有效字符,因此评估会在此处停止。

用于处理隐含代码表达使用剃刀的算法如下:

  1. 解析的标识符 - 只要我们看到一个字符不能在C#或VB标识符有效,我们停止和跳转到步骤2
  2. 检查括号 - 如果我们看到“(”或“[”,则转到步骤2.1,否则,转到步骤3
    1. 解析直到匹配。“)”或“]”(我们追踪嵌套的“()”和“[]”对,并忽略我们在字符串或注释中看到的“()[]”)
    2. 返回步骤2
  3. 检查“。” - 如果我们看到一个,请转至步骤3.1,否则,请勿接受“。”。作为代码,并转到步骤4
    1. 如果字符在“。”之后。是一个有效的标识符,接受“。”并返回步骤1,否则,转到步骤4
  4. 完成!

(来自ScottGu's Blog两者)​​

3

尝试这样的:

id="@(ViewData.ModelMetadata.ContainerType.Name)[email protected](ViewData.TemplateInfo.GetFullHtmlFieldId("FromDate"))" 

或像这样:

id="@string.Format("{0}_{1}", ViewData.ModelMetadata.ContainerType.Name, ViewData.TemplateInfo.GetFullHtmlFieldId("FromDate"))" 
+0

也是一个很好的一个;-) – DanielB

2
id="@(ViewData.ModelMetadata.ContainerType.Name + "_" + ViewData.TemplateInfo.GetFullHtmlFieldId("FromDate"))"