2013-05-13 62 views
0

我正在開發一個asp.net mvc 3應用程序。我使用Razor來表達我的觀點。星期五我遇到了這個問題,並認爲我已經修復了它,但現在我發現這只是某些私人事件,因爲某些原因,這些事情都是有效的。我的C#代碼的右花括號在剃刀局部視圖中無法識別

我有四列的表,但每一行可能有不同數量的字段在一個小區中,所以我工作的一些排序算法,這將填補我的細胞屬於他們所有的信息。這是我現在有:

@{ 
    int tempColumn = 1;  
} 

<tr> 
@foreach (var field in Model) 
{ 
    if (field != null) 
    { 
     <td>  
     @for (int i = 0; i < field.Count; i++) 
     { 
      if (field[i].ColumnNo == tempColumn) 
      { 
       @field[i].QuestionText; 
       @field[i].FieldValue; 
      } 
      else if (field[i] != null) 
      { 
       tempColumn++; 
       @:</td> 
       @:<td> 
       @field[i].QuestionText; 
       @field[i].FieldValue; 
      } 
     } 
    } 
    @:</td>  
} 
</tr> 

基本的想法是,不管多雙@field[i].QuestionText;/@field[i].FieldValue;如何我有我將永遠有一個開口<td>標籤在該行的開頭,並在關閉</td>標籤行的末尾。我也有算法問題,但在解決問題之前,我無法繼續使用未識別的閉環。那麼,什麼是錯誤 - 當我嘗試和調試模式運行這個代碼,我得到這個錯誤:

在foreach塊缺少結束「}」字符。確保你 有一個匹配的「}」字符這個 塊內所有的「{」字符,並且沒有「}」字符被解釋爲 標記。

但是當我轉到代碼本身時,我得到了與if塊和for塊相同的錯誤。我認爲插入HTML <td></td>標籤使用這種語法 - @:將保持我的C#代碼的結構,只是在我想要的地方添加標籤,但從我認爲至少有一個<td></td></td>標籤被解釋爲所有後面的內容都被識別爲HTML標記而不是C#代碼。那麼在C#方法中插入HTML標記的正確方法是什麼,或者如果錯誤是由其他東西引起的 - 它會是什麼?

P.S

關於算法的任何幫助將不勝感激,雖然它不是這個問題的話題。

回答

3

變化

  } 
     } 
    } 
    @:</td>  
} 
</tr> 

  } 
     } 
     </td>  
    } 
} 
</tr> 

您啓動<td>if (field != null)裏面,所以你應該在裏面有作爲結束,否則,如果field == null你會得到<tr></td></tr>

+0

謝謝。我發現它很難,但這確實是問題。 – Leron 2013-05-13 07:39:15

+0

@majorByte - 你能說出@的含義嗎? – 2013-05-13 07:57:18

+0

@ewvfwrwwvw:'@:'用於混合代碼和非代碼/文本。例如'@if(true){output this text}'會拋出一個錯誤,因爲輸出不能作爲類型或名稱空間找到,因爲剃鬚刀認爲它是代碼而不是文本。 '@if(true){@:輸出這個文本}'告訴剃刀它正在處理文本而不是代碼。對於HTML標籤沒有必要雖然,因爲剃刀將它識別爲文本,即:'@if(真){輸出本文}' – 2013-05-13 08:26:54

相關問題