2014-01-29 4 views
0

KendoGrid Content Template 및 인라인 면도기를 사용하여 셀의 내용을 동적으로 설정하려고하지만 모든 종류의 오류가 발생합니다.면도기 인라인 코드 생성 컴파일러 오류

"<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 :)가 @에서 내 코드에 나타나는 것과 같은 줄에 있어야합니다.

다른 변형도 시도했지만 그 중 아무 것도 작동하지 않는 것 같습니다. 내가 여기서 잘못하거나 뭘 어쩔 건데? :-(

기본적으로 셀의 제어는 당신은 html 태그와 C# 코드를 지정합니다.

답변

1

면도기 문자열 합치 구문의 일종이 아니다. 미디어 유형에 따라, 그리고 면도기 엔진을 쓴다 변경해야 클라이언트에.

@{ 블록 (또는 다른 코드 블록), 당신은 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

깨달음 주셔서 감사합니다. 코드 블록 안의 @는 오류의 의미를 알아 내려고 노력하면서 무의미한 시도였습니다. 귀하의 권장 사항을 기반으로 내 코드를 수정하고 더 이상 다른 오류 중 하나가 나타나지 않지만 "파서 오류 메시지 : 인라인 마크 업 블록 (@

내용

)은 중첩 될 수 없습니다. 인라인 태그의 한 수준 만 허용됩니다." @를 사용하는 else 블록에서 : 어떤 아이디어가 그 의미인가? 나는 그 사용에 대한 당신의 설명을 이해하지만 오류는 나에게 이해가되지 않는다. – Mark

+0

여기 좀보세요 : http://www.aspnetwiki.com/telerik-mvc:nested-container-controls-and-razor-helper 과 같은 중첩 태그가 있습니다. – GvS

+0

나는 그것이 당장 명백하지 않다. 그러나 나는 당신의 연결에서 제공된 대체 접근법을 확실히 시도 할 것입니다. 감사. – Mark