Razor连接问题



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

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

,但它是通过id="propertyName +"。在razor视图中,我如何用中间的下划线将两者连接在一起?

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

您需要在这里显式,因为@ViewData.ModelMetadata.ContainerType.Name后面的空格不是c#标识符的有效字符,因此计算停止在那里。

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

  1. 解析标识符-一旦我们看到一个字符在c#或VB标识符中无效,我们停止并移动到步骤2
  2. 检查括号-如果我们看到"("或"[",转到步骤2.1。,否则请转步骤3
    1. 解析直到匹配的")"或"]"(我们跟踪嵌套的"()"one_answers"[]"对,忽略我们在字符串或注释中看到的"()[]")
    2. 返回步骤2
  3. 检查是否有"。"-如果我们看到一个,转到步骤3.1,否则,不要接受"。"作为代码,并转到步骤4
    1. 如果"。"后面的字符是有效的标识符,接受"。"并返回步骤1,否则,转到步骤4
  4. 完成了!

(摘自ScottGu的博客)

试试:

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

或者像这样:

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

最新更新