我正在尝试使用KendoGrid内容模板和内联Razor动态设置单元格的内容,但我遇到了各种错误。
"<table><tr>" +
"<td style='color:yellow; width:200px;height:13px;padding-top:0px; margin-top:0px;text-align:center;' class='audiogrid'>" +
@{
@if ((int)TempData["MediaTypeId"] == 1) {
@"<audio id='a1' src='#: MediaLocation #' controls='controls' preload='auto' autobuffer><embed height='26' autostart = 'false' type = 'audio/mpeg' width='290' src='#: MediaLocation #'></audio>" +
}
else{
@" #: Description # " +
}
}
"</td>" +
"</tr></table>"
上面的代码抛出一个错误:CS1646:在逐字说明符之后预期的关键字,标识符或字符串:@在@符号的第一个实例。
我不明白为什么或这个错误意味着什么。根据在MVC4中使用Razor的规则,我的语法应该有效。做了一点研究,确保语法准确here 但我尝试了一个变体,其中包含@之后的字符串作为错误建议并且我认为应该也可以正常工作:
"<table><tr>" +
"<td style='color:yellow; width:200px;height:13px;padding-top:0px; margin-top:0px;text-align:center;' class='audiogrid'>" +
@if ((int)TempData["MediaTypeId"] == 1) {
@"<audio id='a1' src='#: MediaLocation #' controls='controls' preload='auto' autobuffer><embed height='26' autostart = 'false' type = 'audio/mpeg' width='290' src='#: MediaLocation #'></audio>" +
}
else{
@" #: Description # " +
}
"</td>" +
"</tr></table>"
这次我得到编译器错误消息:CS1026 :)预期在我的代码中出现@ first的同一行。
我也尝试了其他一些变化,但它们似乎都没有效果。 我在这里做错了什么或错过了什么? : - (
基本上,单元格中的控件应根据介质类型进行更改。
答案 0 :(得分:1)
Razor不是某种字符串连接语法。您指定html标记和C#代码,Razor引擎将它们写入客户端。
在@{
块(或任何其他代码块)中,您可以使用C#语句。没有必要额外的@。
在@if
(或任何其他代码块)中,您可以使用html标记。无需在@。
在else
块内,使用@:
输出不带html标记的html。
<table><tr>
<td style='color:yellow; width:200px;height:13px;padding-top:0px; margin-top:0px;text-align:center;' class='audiogrid'>
@{
if ((int)TempData["MediaTypeId"] == 1) {
<audio id='a1' src='#: MediaLocation #' controls='controls' preload='auto' autobuffer><embed height='26' autostart = 'false' type = 'audio/mpeg' width='290' src='#: MediaLocation #'></audio>
}
else{
<text> #: Description # </text>
}
}