2011-02-09 4 views
27

면도날로 부분보기를 마쳤습니다. 내가 그것을 실행할 때 나는 다음과 같은 오류를 얻는다. - 면도날이 내가 사방에 코드를 작성하고 있다고 생각하게된다."@"문자 다음에 예기치 않은 "foreach"키워드가 있음

"@"문자 다음에 예기치 않은 "foreach"키워드가 있습니다. 일단 코드 내부에, 당신은 "@"여기

와 "foreach는"같은 구조를 접두사 필요가없는 것이 내 생각이다 : 당신의 using 블록 내부

@model IEnumerable<SomeModel> 

<div> 
@using(Html.BeginForm("Update", "UserManagement", FormMethod.Post)) { 

    @Html.Hidden("UserId", ViewBag.UserId) 

@foreach(var link in Model) { 
    if(link.Linked) { 
     <input type="checkbox" name="userLinks" value="@link.Id" checked="checked" />@link.Description<br /> 
    } else { 
     <input type="checkbox" name="userLinks" value="@link.Id" />@link.Description<br />   
    } 
} 

} 
</div> 

답변

47

, 면도기는 C#을 소스를 기대하지 HTML .

따라서 @없이 foreach을 써야합니다.

면도날에는 HTML 태그 안에 마크 업이 필요하므로 @을 사용합니다. 예를 들어

은 : 당신이 마크 업을 기대 어디에 코드를 삽입하려는 경우

<div> 
    <!-- Markup goes here --> 
    @if (x) { 
     //Code goes here 
     if (y) { 
      //More code goes here 
      <div> 
       <!-- Markup goes here --> 
       @if (z) { } 
      </div> 
     } 
    } 
</div> 

당신은 단지 @이 필요하거나 어디서든 출력을 작성합니다.

코드와 일치하지 않는 태그를 넣으려면 @: 또는 <text>을 사용하십시오.

+2

+1 -이 면도기 학습에 내 # 1 걸림돌로 찾는거야 :

말 예를 들어 다음과 같은했다. 내 뇌는 그 차이를 즉시 인식하지 못하는 것 같습니다. 더 잘할 수는 있지만, 여전히 나 자신이 틀린 것을 쓰고 다시 그 길을 생각해야한다는 것을 알게됩니다. –

+0

예; 이것은 미묘하지만 중요한 구분입니다. 면도날 시리즈의 일부로이 블로그 게시물을 작성할 계획이지만, 앞으로도 더 많은 부분이 필요합니다. – SLaks

+0

@Slaks - 예, 코드와 마크 업 간의 앞뒤로의 이동은 나에게 잘못된 것처럼 보입니다. 지금은 몇 년 동안 "코드 또는 마크 업이지만 두 가지가 아닌"환경에 있었기 때문에 마음이 마비되었습니다. 확실히 일시적인 좌절감의 가치가 있습니다. 나는 큰면으로 면도칼레를 마시고있다. –

2

그냥 마크 업 내에있는 코드 섹션을 방해하지 않는 SLaks에 대답을 추가하고 닫는 태그에 도달하면 바로 마크 업 섹션으로 되돌아갑니다.

한 번 마크 업 내에있는 경우 코드 뒤에 @ 기호를 사용해야합니다.

@if(true) { 
     <span> 
      Markup section here, you need to include the @symbol 
      @if(1 = 1) 
      { 
      } 
      @if(2 = 2) @* The @ symbol here is required *@ 
      { 
      }     
     </span> 
     @: Code section back here, to output you need the "@:" symbol to display markup, although it is after the markup 
     if(false) @* Here the @ symbol isn't required *@ 
     { 
      some_statment; @* This will not be sent to the browser *@ 
      @display_someStament @* If we want to send it to the browser, 
        then we need the @ symbol even in the code section *@ 
     } 
}