2012-12-28 2 views
1

MVC 3에서 상당히 새로운데, 다소 호기심 많은 문제가 생겼습니다. 저는 Razor 구문을 사용하고 있습니다. VS에 따르면 @ 문 앞에 다른 @ 문이 있거나 코드 내에 한 번 더 접두어 @이 더 이상 필요하지 않으면 문에 접두사를 붙일 필요가 없습니다.MVC 면도기에서 @는 어떻게 사용되고 언제 필요합니까?

@using (Html.BeginForm("StudentSelect", "Home", FormMethod.Post, new { id = "sSelect" })) { 

     Html.HiddenFor(m => m.SelectedStudent); 
     foreach (Classes.CStudent item in Model.Students) 
     { 
      <div class="studentSelect"> 
       <div class="studentname">@item.StudentName</div> 
       <div>@item.Address</div> 
      </div> 
     } 
    } 

Html.HiddenForforeach 라인 @ 접두사를하지 않아도하지 보자

그래서 여기 내보기에 내 코드입니다. 생성 된 HTML은 <form> 다음에 <input type="hidden"> 필드를 생성해야합니다. 그러나 생성 된 페이지에서 HTML을 확인하면 숨겨진 입력 필드가 누락됩니다.

<form action="/Home/StudentSelect" id="sSelect" method="post">     
    <div class="studentSelect"> 
     <div class="studentname">Name1</div> 
     <div>AAA</div> 
    </div> 
    <div class="studentSelect"> 
     <div class="studentname">Name2</div> 
     <div>Address1</div> 
    </div> 
</form> 

내가 잘못 했나요? 숨겨진 입력이 렌더링되지 않는 이유는 무엇입니까? 실마리가 도움이됩니다. 감사합니다

그건 그렇고,이 코드가 올바르게 컴파일됩니다. 그러나 Html.HiddenFor 앞에 @ 접두사를 붙이면 내 코드가 컴파일되지 않고 Visual Studio에서 오류가 발생합니다.

+0

컴파일 오류를 제공 할 수 있습니까? 뷰는 일반적으로 컴파일되지 않습니다. –

답변

2

@은 두 가지 용도로 사용됩니다. 하나는 "코드 모드"를 나타내고 하나는 Response.Write을 나타냅니다.

using 앞에 오는 @의 인스턴스가 "코드 모드"를 트리거합니다. 예 : 이 item.Address 앞에 오면 Response.Write(item.Address);과 같습니다. 응답 스트림에 쓸 필요가있는 MvcHtmlString 출력을 반환하므로 여전히 Html.HiddenFor으로 입력해야합니다.

이 줄 :

Html.HiddenFor(m => m.SelectedStudent); 

가 있어야한다 :

@Html.HiddenFor(m => m.SelectedStudent) 

사항은 ;이 더 이상 필요하지 않습니다.

+0

그러나'@ '접두어를 붙이면 내 코드가 컴파일되지 않습니다. VS에서 오류가 발생합니다. – Devmonster

+0

보기가 일반적으로 컴파일되지 않습니다. RazorGenerator와 같은 도구로 컴파일 된 뷰를 만들고 있습니까? –

+0

아니요, 컴파일 할 때 코드를 검사 할 VS가 있습니다. 나는 프로젝트 파일 – Devmonster