2010-11-25 2 views
1

누구든지이 ASP.NET 구문을 RAZOR 구문으로 변환 할 수 있습니까? Razor 구문으로 "일대일"로 변환 할 수 없습니다. (MVC3 면도기 구문. 이 ASP.NET 스타일을 면도기로 어떻게 변환합니까? (따옴표 안에 @가 붙은 문제)

@Themes.ThemesAvailable().ForEach(i => { 
     if (i.Equals(Themes.ThemeToUse)){ 
     @:<a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a> 
     ;}else{ 
     @:<a href="" style="color:Blue" id='[email protected]'>@i</a> 
     ;} }) 

이 작동하지 않습니다

<% Themes.ThemesAvailable().ForEach(i => 
    { 
     if (i.Equals(Themes.ThemeToUse)) 
     {%> 
     <a href="" id="A1" style="font-size:x-large;color:Red"><%:i%></a> 
     <%} 
     else 
     {%> 
     <a href="" style="color:Blue" id="ChangeThemeTo_<%:i%>"><%:i%></a> 
     <%} %> 
    <br /> 
<% });%> 

다음은 작동하지 않습니다는 (만 할당, 전화, 증가, 감소, 새로운 객체 표현은 성명로 사용할 수 있습니다 CS0201에 대해 불평) 작동 종료 텍스트 태그 정지 갑자기는 =

@Themes.ThemesAvailable().ForEach(i => 
    { 
     if (i.Equals(Themes.ThemeToUse)){ 
     @<text><a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a></text> 
     ;} else { 
     @<text><a href="" style="color:Blue" id='[email protected]'>@i</a></text> 
     ;} 
}) 

이드 내의 @i 보이는데) 페이지 줄 1 COL1의 상단의 '}'나는 @ ChangeThemeTo_ '를 기대한다. '@'를 제거하면 요소가 작동합니다. 첫 번째 전환 시도 (CS0201)와 동일한 오류가 발생합니다.

람다의 사용을 제거,이 내가 제거 할 경우에만 '@'ID에서 작동하지만, = 'ChangeThemeTo_i'

 
     @foreach (var i in Themes.ThemesAvailable()){ 
      if (i.Equals(Themes.ThemeToUse)){
<a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a> } else {
<a href="" style="color:Blue" id='ChangeThemeTo_i'>@i</a> } }

답변

2

내가 @ 기호의 당신의 과다 사용을주고있다 생각 한 가지를 들어 문제. 시도 : 그들을 연결하여 간단하게

<a href="" style="color:Blue" id="@(string.Format("ChangeThemeTo_{0}", i))">@i</a> 

을 또는 :

@foreach(var i in Themes.ThemesAvailable()) 
{ 
    if (i.Equals(Themes.ThemeToUse)) 
    { 
     <text><a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a></text> 
    } 
    else 
    { 
     <text><a href="" style="color:Blue" id='[email protected]'>@i</a></text> 
    } 
} 

편집이 속성을 제대로 ID를 작성하지 않을 최신 문제에 대한

를 대신 및 String.format를 사용해보십시오

<a href="" style="color:Blue" id="@("ChangeThemeTo_" + i)">@i</a> 
+0

아니요. i => {...} 내의 모든 내용이 코드로 간주됩니다. 그래서 탈옥하려면 @은 앞에 놓여 야합니다. 내 두 번째 예처럼. 그것도 작동하지 않습니다 ... 면도기 intellisense/컴파일러는 람다 표현 내에서 아주 잘 작동하지 않는 것 같아 ...? – Wolf5

+0

네, 방금 저 자신을 보았습니다. ForEach() 메서드를 사용하여 데이터를 순환하는 대신 전통적인 for..each 구조를 사용하여 시도해 보셨습니까? –

+0

lambda 표현식 대신 foreach()를 수행하면 코드 대 태그가 훨씬 잘 작동합니다. 하지만 id 태그에 따옴표 안에 @i가 있으면 안됩니다. 그것은 그것을 깨뜨린다. 그리고 코드의 1 행 1 열에 '}'이 누락 된 오류가 발생합니다. – Wolf5

0

그래서 분명히 befor 텍스트가 필요합니다. e 마크 업 파서 작업을위한 코드

@foreach(var theme in Themes.ThemesAvailable()) { 
    if (theme.Equals(Themes.ThemeToUse)) 
     <a href="" id="a1" style="font-size:x-large;color:Red">@theme</a> 
    else 
     <a href="" style="color:Blue" id="[email protected](theme)">@theme</a> 
} 

위 코드는 모두 작동하는 데 필요합니다. text 태그를 사용할 필요가없는 이유는 text이 html과 비슷한 모양의 html 태그 일 뿐이므로 파서를 html 모드로 전환해야하기 때문입니다. 실제 HTML 태그는 텍스트를 사용하지 않아도 동일한 작업을 수행합니다. 두 번째 앵커 태그에 id 태그에 @(theme)을 사용해야하는 이유는 전자 메일 주소와 비슷해 보이고 파서는 전자 메일 주소처럼 보이는 것을 무시하기 때문일 수 있습니다. 사이에 공백을 두어 ChangeThemeTo_ @theme을 입력하면이 사실을 확인할 수 있으며 작동하는지 확인할 수 있습니다. @()은 컴파일러가 코드로 () 사이를 인식하도록 강제합니다. 파서에 대한 이해를 돕기를 바랍니다.

+0

감사합니다. 나는 작동하도록 내 코드를 가지고 있지만 파서를 더 잘 이해 한 후에도 Lambda 표현식이 '('와 ')'사이에 있으므로 제대로 작동하도록 만드는 방법을 찾을 수 없다. 그리고 그 사이의 모든 것은 코드가 아니라면 자동으로 구문 분석된다. 당신은 @으로 깰 수 있습니다. 하지만 컴파일러 (실행시)가 실행될 코드를 찾고 HTML 태그를 이해하지 못하기 때문에 작동하지 않는 것처럼 보입니다. 좋은 CS0201 오류 (예상 코드 오류)가 발생합니다. lambdas와 linq로 "모든 것이 끝나야 할 때"Razor를 실제로 사용하는 방법을 알면 좋을 것입니다. – Wolf5

관련 문제