【问题标题】:if else statement in Razor is not functioningRazor 中的 if else 语句不起作用
【发布时间】:2011-12-18 02:38:09
【问题描述】:

我在 Razor 视图中使用 if else 来检查 null 值,如下所示:

 @foreach (var item in Model)
    {
        <tr id="@(item.ShopListID)">
            <td class="shoptablename">@Html.DisplayFor(modelItem => item.Name)
            </td>
            <td class="shoptableamount">
                @if (item.Amount == null)
                {
                    Html.Display("--");
                }
                else
                {
                    String.Format("{0:0.##}", item.Amount);
                }
            </td>
        </tr>

    }

但是,无论我的模型金额为空还是有值,呈现的html都不包含金额中的任何值。

我想知道为什么会这样。有什么想法吗?

谢谢...

编辑:

决定在控制器中做:

   // Function to return shop list food item amount
    public string GetItemAmount(int fid)
    {
        string output = "";

        // Select the item based on shoplistfoodid
        var shopListFood = dbEntities.SHOPLISTFOODs.Single(s => s.ShopListFoodID == fid);

        if (shopListFood.Amount == null)
        {
            output = "--";
        }
        else
        {
            output = String.Format("{0:0.##}", shopListFood.Amount);
        }
        return output;
    }

并在视图中调用:

 <td class="shoptableamount">
                @Html.Action("GetItemAmount", "Shop", new { fid = item.ShopListFoodID })
            </td>

【问题讨论】:

  • 您必须向我们展示模型本身的外观,特别是 Model.Amount 字段。也许试试 @if (string.IsNullOrEmpty(item.Amount) 代替?
  • 您好,感谢您的帮助,但金额是小数,如果我按照您在此处说明的操作,它不起作用。无论如何,请参考我的编辑,因为我决定在控制器中进行。谢谢你:)
  • If else 组合确实不适用于剃须刀。

标签: asp.net-mvc-3 razor if-statement


【解决方案1】:

你必须使用@()

            @if (item.Amount == null)
            {
                @("--");
            }
            else
            {
                @String.Format("{0:0.##}", item.Amount)
            }

如 cmets 和其他答案中所述,Html.Display 不是用于显示字符串,而是用于显示来自 ViewData 字典或来自 Model 的数据。阅读http://msdn.microsoft.com/en-us/library/ee310174%28v=VS.98%29.aspx#Y0

【讨论】:

  • 如果我在剃刀中执行此操作,您的答案有效:@if (item.Amount == null) { @Html.Display("--") } 但我无法让 null 检查有效,所以我决定改为在控制器中进行。谢谢!
  • @shennyL 查看我的答案和 dotnetstep 的答案。我不认为Display() 方法正在做你认为它正在做的事情。
  • @shennyL,正如@Shark 指出的那样,除了缺少实际输出某些东西的@ 之外,Html.Display 并没有按照你的想法做......
【解决方案2】:

如果金额为空,我认为您想显示“-----”。

@foreach (var item in Model)
    {
        <tr id="@(item.ShopListID)">
            <td class="shoptablename">@Html.DisplayFor(modelItem => item.Name)
            </td>
            <td class="shoptableamount">
                @if (item.Amount == null)
                {
                    @Html.Raw("--")
                }
                else
                {
                    String.Format("{0:0.##}", item.Amount);
                }
            </td>
        </tr>

    }

【讨论】:

    【解决方案3】:

    那是因为您错误地使用了Display() 方法。您使用的重载是Display(HtmlHelper, String)。如果您正在寻找“--”作为文本,您应该使用类似:

    @Html.Label("--");
    

    【讨论】:

      【解决方案4】:

      除了建议的@(“”)之外,实际上还有另外两种方法可以在razor中显示代码块中的文本,使用标签,它是简写@:

          @{
              @("--")
              <text>--</text>
              @:--
          }
      

      上面的代码将显示 -- 3 次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-12
        • 2022-01-16
        • 2014-09-15
        相关资源
        最近更新 更多