簡體   English   中英

如果條件不適用於帶有C#代碼的HTML頁面

[英]If condition not working in HTML page with C# code

我正在使用以下代碼用數據填充表。 if語句沒有像我預期的那樣工作。 條件塊中的兩個語句都被執行。

  @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>
}

我在這里失蹤了什么? 不是這樣的使用不可能嗎?

編輯(看到答案后)

我想 -

進入代碼后,您不需要使用“@”作為“if”的結構前綴

你需要從@開始......

@foreach (Message userMessage in UserMessages)
{

和...

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

如果沒有它,那么if(仍被視為HTML。


@符號標識Razor語法的開頭(即C#代碼),並將繼續成為剃刀代碼塊,直到達到適當的終結符。 有許多方法可以將其移回HTML,在您的示例中最常見的方法是包含一個html標記,例如<td>

這是您的代碼的完整版本,希望它可以幫助您了解它應該如何工作:

<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>

(我知道這些評論在Razor中不起作用所以不要添加它們)


並清理你最初的想法。 如果您沒有第一個<tr>標簽,那么以下內容將起作用......

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

注意整個if語句行不需要@符號,因為我們從未移回到HTML模式。

你的代碼的問題在於你混淆了什么是HTML和什么是Razor。 @符號應該是你的Razor代碼啟動的地方,然后你不需要在Razor代碼中使用它。

當你寫if(@userMessage.Message.MessageText.Length <= 10) if不被視為Razor代碼而是HTML的一部分。 所以每當你離開HTML並進入Razor模式時,你需要有一個@標記。 if語句應該看起來像@if(userMessage.Message.MessageText.Length <= 10)

代碼的完整示例如下所示:

<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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM