Asp.net mvc 4 Razor内联代码生成编译器错误

Asp.net mvc 4 Razor内联代码生成编译器错误,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,我试图使用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"]

我试图使用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{
     @"&nbsp; #: Description # " +
   }
}
"</td>" +
"</tr></table>"
“”+
"" +
@{
@如果((int)TempData[“MediaTypeId”]==1){
@"
但我尝试了一种变体,按照错误提示,在@后面包含一个字符串,我认为也可以:

"<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{
          @"&nbsp; #: Description # " +
    }
"</td>" +
"</tr></table>" 
“”+
"" +
@如果((int)TempData[“MediaTypeId”]==1){
@"" +
}
否则{
@“#:描述#”+
}
"" +
"" 
这一次,我得到了编译器错误消息:CS1026:),应该在代码中第一次出现@的同一行

我也尝试过一些其他的变化,但它们似乎都不起作用。 我做错了什么或错过了什么-(


基本上,单元格中的控件应根据媒体类型进行更改。

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>&nbsp; #: Description # </text>
   }
}

@{
如果((int)TempData[“MediaTypeId”]==1){
}
否则{
#:Description#
}
}

感谢GY的启发。代码块中的@是我试图确定错误含义的徒劳尝试。我根据您的建议修改了代码,不再收到任何其他错误,但现在收到“解析器错误消息:内联标记块(@内容)

)不能嵌套。只允许一级内联标记。“在else块中使用@:有什么想法吗?我理解您对其用法的解释,但在此处查看错误是没有意义的:看起来您的标签是嵌套的。如果我不是很明显。但我一定会尝试您链接中提供的替代方法。谢谢。”。