【问题标题】:If condition not working in HTML page with C# code如果条件在使用 C# 代码的 HTML 页面中不起作用
【发布时间】:2013-09-09 01:45:22
【问题描述】:

我正在使用以下代码用数据填充表格。 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”之类的结构前面加上“@”

【问题讨论】:

    标签: c# .net html razor


    【解决方案1】:

    你需要以@开头...

    @foreach (Message userMessage in UserMessages)
    {
    

    还有……

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

    一开始没有它,if( 仍然被视为 HTML。


    @ 符号标识 Razor 语法(即 C# 代码)的开头,并且将继续作为 Razor 代码块,直到达到适当的终止符。有多种方法可以将其移回 HTML,在您的示例中最常见的一种是包含 html 标记,例如 &lt;td&gt;

    这是您的代码的完整版本,希望它能帮助您了解它的工作原理:

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

    (我知道这些 cmets 在 Razor 中不起作用,所以不要添加它们)


    并澄清你最初的想法。如果您没有第一个 &lt;tr&gt; 标记,则以下内容将起作用...

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

    注意整个 if 语句行不需要@ 符号,因为我们从未回到 HTML 模式。

    【讨论】:

    • 我已经有一个外部 if 语句。那么需要内部的吗?
    • @Rohit:是的,因为 html 标签会将其改回 HTML。请参阅我的编辑以获得更好的解释
    【解决方案2】:

    您的代码的问题在于您混淆了 HTML 和 Razor。 @ 符号应该是你的 Razor 代码开始的地方,然后你不需要在 Razor 代码中使用它。

    当您编写 if(@userMessage.Message.MessageText.Length &lt;= 10) 时,if 不会被视为 Razor 代码,而是 HTML 的一部分。因此,每次离开 HTML 并进入 Razor 模式时,您都需要有一个 @ 标记。 if 语句应该看起来像 @if(userMessage.Message.MessageText.Length &lt;= 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>
    

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多