2014-01-29 60 views
0

我想動態設置使用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>" 

上面的代碼引發一個錯誤: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{ 
      @"&nbsp; #: Description # " + 
    } 
"</td>" + 
"</tr></table>" 

這一次我收到編譯器錯誤消息:CS1026:)預計在@代碼中出現的第一行。

我也嘗試了一些其他的變化,但沒有一個似乎工作。 我在做什麼錯或在這裏失蹤? :-(

基本上在細胞內控制應該改變基於媒體類型。

回答

1

剃鬚刀不是某種字符串拼接語法。您指定的HTML標籤和C#代碼,和剃刀引擎將它們寫到客戶端。

內的@{塊(或任何其他代碼塊),你可以使用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> 
    } 
} 
+0

謝謝Gyter的啓示。代碼塊中的@是我試圖確定錯誤意味着什麼的徒勞嘗試。我根據您的建議修改了我的代碼,不再收到其他任何錯誤,但現在正在收到「解析器錯誤消息:內聯標記塊(@

內容

)不能嵌套,只允許一級內聯標記。在else塊中使用@:任何想法是什麼意思?我理解你的使用說明,但錯誤對我沒有意義 – Mark

+0

看看這裏:http://www.aspnetwiki.com/telerik-mvc:nested-container-controls-and-razor-helper看起來像你的嵌套標籤如。 – GvS

+0

如果我不是很明顯。但我一定會嘗試在您的鏈接中提供的替代方法。謝謝。 – Mark