MVC3 Razor连接问题

时间:2011-11-07 16:10:03

标签: asp.net-mvc-3 concatenation razor

我正在尝试通过执行以下操作为输入创建id

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

但它是通过id =“propertyName +”来实现的。如何在剃刀视图中将两者连接在一起用中间的下划线?

3 个答案:

答案 0 :(得分:4)

您可以使用@(expression)语法来表达显式代码表达式。

你需要在这里明确,因为@ViewData.ModelMetadata.ContainerType.Name之后的空格不是C#标识符的有效字符,因此评估会在那里停止。

Razor用于处理隐式代码表达式的算法如下:

  1. 解析标识符 - 只要我们看到一个在C#或VB标识符中无效的字符,我们就会停止并转到第2步
  2. 检查括号 - 如果我们看到“(”或“[”,请转到步骤2.1。否则,请转到步骤3
    1. 解析直到匹配的“)”或“]”(我们跟踪嵌套的“()”和“[]”对并忽略“()[]”我们在字符串或注释中看到的内容)
    2. 返回第2步
  3. 检查“。” - 如果我们看到一个,请转到步骤3.1,否则,请勿接受“。”作为代码,转到第4步
    1. 如果字符在“。”后面。是一个有效的标识符,接受“。”并返回步骤1,否则,请转到步骤4
  4. 完成!
  5. (取自ScottGu's Blog

答案 1 :(得分:3)

试试这样:

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

或者像这样:

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

答案 2 :(得分:2)

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