我试图通过执行以下操作为输入创建id
id="@ViewData.ModelMetadata.ContainerType.Name + "_" + @ViewData.TemplateInfo.GetFullHtmlFieldId("FromDate")"
,但它是通过id="propertyName +"。在razor视图中,我如何用中间的下划线将两者连接在一起?
您可以使用@(expression)
语法来表示显式的代码表达式。
您需要在这里显式,因为@ViewData.ModelMetadata.ContainerType.Name
后面的空格不是c#标识符的有效字符,因此计算停止在那里。
Razor处理隐式代码表达式的算法如下:
- 解析标识符-一旦我们看到一个字符在c#或VB标识符中无效,我们停止并移动到步骤2
- 检查括号-如果我们看到"("或"[",转到步骤2.1。,否则请转步骤3
- 解析直到匹配的")"或"]"(我们跟踪嵌套的"()"one_answers"[]"对,忽略我们在字符串或注释中看到的"()[]")
- 返回步骤2
- 检查是否有"。"-如果我们看到一个,转到步骤3.1,否则,不要接受"。"作为代码,并转到步骤4
- 如果"。"后面的字符是有效的标识符,接受"。"并返回步骤1,否则,转到步骤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"))"