it-swarm-pt.tech

se a declaração do Razor não estiver funcionando

Estou usando um if else no modo Razor para verificar o valor nulo como este:

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

    }

No entanto, independentemente do valor do meu modelo ser nulo ou ter um valor, o html renderizado não contém nenhum valor no valor.

Eu me pergunto por que isso está acontecendo. Qualquer ideia?

Obrigado...

EDITAR:

Decidiu fazer isso no controlador:

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

e ligue para Ver como:

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

Você precisa usar a @()

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

Conforme observado nos comentários e outras respostas, o Html.Display não é para exibir strings, mas para exibir dados do ViewData Dictionary ou de um Model. Leia http://msdn.Microsoft.com/en-us/library/ee310174%28v=VS.98%29.aspx#Y0

66
Gabriele Petrioli

Eu acho que você deseja exibir "-----" se o valor for nulo.

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

    }
6
dotnetstep

Isso ocorre porque você está usando o método Display() incorretamente. A sobrecarga que você está usando é Display(HtmlHelper, String) . Se você estiver procurando por "-" como texto, use algo como:

@Html.Label("--");
1
user596075

Na verdade, existem duas outras maneiras de exibir texto de um bloco de código no razor, além do @ ("") sugerido, usando uma tag <text> e sua abreviação @:

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

O código acima será exibido - três vezes.

1
mnwsmit