если еще оператор в Razor не работает - PullRequest
24 голосов
/ 18 декабря 2011

Я использую if else в представлении Razor, чтобы проверить наличие нулевого значения, например:

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

и вызвать на View, как:

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

Ответы [ 4 ]

66 голосов
/ 18 декабря 2011

Вы должны использовать @()

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

Как отмечено в комментариях и других ответах, Html.Display предназначен не для отображения строк, а для отображения данных из словаря ViewData или из Model. Читать http://msdn.microsoft.com/en-us/library/ee310174%28v=VS.98%29.aspx#Y0

6 голосов
/ 18 декабря 2011

Я думаю, что вы хотите отобразить "-----", если сумма равна нулю.

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

    }
1 голос
/ 23 февраля 2016

На самом деле есть еще два способа отображения текста из блока кода в бритве, кроме предложенного @ (""), с использованием тега и его сокращения @:

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

Приведенный выше код будет отображаться - три раза.

1 голос
/ 18 декабря 2011

Это потому, что вы используете метод Display() неправильно. Используемая вами перегрузка составляет Display(HtmlHelper, String). Если вы ищете «-» в качестве текста, вы должны использовать что-то вроде:

@Html.Label("--");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...