2013-09-05 2 views
5

다음 코드를 사용하여 데이터로 테이블을 채우고 있습니다. if 문이 예상대로 작동하지 않습니다. 조건 블록의 두 문이 모두 실행됩니다.C# 코드가있는 HTML 페이지에서 조건이 작동하지 않는 경우

  @if (--somecondition--) 
  { 
     <table> 
     foreach (Message userMessage in UserMessages) 
     {        
       <tr> 
        if(@userMessage.Message.MessageText.Length <= 10) 
        { 
         <td> 
          @userMessage.Message.MessageText 
         </td> 
        } 
        if(@userMessage.Message.MessageText.Length > 10) 
        { 
         <td> 
          @userMessage.Message.MessageText.Substring(0, 10) 
         </td> 
        }  
       </tr>   
     } 
    </table> 
} 

무엇이 여기에 있습니까? 그런 용도는 사용할 수 없습니까?

은 (답을보고 난 후에) 편집 :

나는 생각 -

일단 코드 내부

, 당신은 "만약"과 같은 구조를 접두사 필요가 없습니다 "@"

답변

11
당신은 @로 시작해야

...

@foreach (Message userMessage in UserMessages) 
{ 

하고 ... 시작시없이

@if(userMessage.Message.MessageText.Length <= 10) 
{ 

if( 여전히 HTML로 처리됩니다.


@ 기호는 면도기 구문 (즉 C# 코드)의 시작을 식별하고 적절한 종료에 도달 할 때까지 면도기 코드 블록으로 계속 될 것이다. HTML로 다시 이동하는 방법에는 여러 가지가 있으며 가장 일반적인 예는 <td>과 같은 html 태그를 포함하는 것입니다.

<table> 
//due to the table tag, we are current inside HTML 
//so we need to use the @ symbol to move back to razor syntax 
@foreach (Message userMessage in UserMessages) 
{        
    <tr> 
    //using this tag again changes us back to HTML mode 
    //so again we must use the at symbol 
    @if(userMessage.Message.MessageText.Length <= 10) 
    { 
     //still Razor 
     <td> 
     //back in HTML mode 
      @userMessage.Message.MessageText 
     </td> 
    } 
    @if(userMessage.Message.MessageText.Length > 10) 
    { 
     <td> 
      @userMessage.Message.MessageText.Substring(0, 10) 
     </td> 
    }  
    </tr>   
} 
</table> 

(나는이 의견을 알고 면도기에 실 거예요 작업 때문에 추가하지 않음)

: 여기

잘하면 당신이 작동하는 방법을 이해하는 데 도움이됩니다, 코드의 전체 버전입니다

그리고 처음에 생각했던 것을 정리하십시오. 첫 번째 <tr> 태그를 가지고 있지 않은 경우, 그 다음은 ... 일하는 것이

@foreach (Message userMessage in UserMessages) 
{ 
    if(userMessage.Message.MessageText.Length <= 10) 
    { 

공지 사항 우리가 어떻게 다시 HTML 모드로 이동되지 않기 때문에 문 라인, @ 기호를 요구하지 않는 경우 전체.

+0

: 같은

코드의 완벽한 예를 보일 것이다. 내부의 것들이 필요합니까? –

+2

@Rohit : 예, HTML 태그가 다시 HTML로 변경되기 때문입니다. 더 나은 설명을 보려면 편집을 참조하십시오. – musefan

1

코드 문제는 HTML과 Razor가 섞여 있다는 것입니다. @ 부호는 면도기 코드가 시작되는 위치에 있어야하므로 면도기 코드 내에서 사용할 필요가 없습니다.

if(@userMessage.Message.MessageText.Length <= 10)으로 작성하면 if은 Razor 코드로 표시되지 않고 HTML의 일부로 표시됩니다. 따라서 HTML을 떠나 면도기 모드로 갈 때마다 @ 표시가 있어야합니다. if 문은 @if(userMessage.Message.MessageText.Length <= 10)처럼 표시되어야합니다. 이미 if 문 외부를

<table> 
@foreach (Message userMessage in UserMessages) 
{        
    <tr> 
    @if(userMessage.Message.MessageText.Length <= 10) 
    { 
     <td> 
     @userMessage.Message.MessageText 
     </td> 
    } 

    @if(userMessage.Message.MessageText.Length > 10) 
    { 
     <td> 
     @userMessage.Message.MessageText.Substring(0, 10) 
     </td> 
    }  
    </tr>   
</table> 
관련 문제