web-dev-qa-db-fra.com

si la déclaration else dans Razor ne fonctionne pas

J'utilise un if else dans la vue Razor pour vérifier la valeur nulle comme ceci:

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

    }

Cependant, peu importe que le montant de mon modèle soit nul ou ait une valeur, le rendu HTML ne contient aucune valeur dans le montant.

Je me demande pourquoi cela se produit. Une idée?

Merci...

MODIFIER:

Décidé de le faire dans le contrôleur:

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

et appelez à View comme:

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

Vous devez utiliser la @()

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

Comme indiqué dans les commentaires et autres réponses, le Html.Display n'est pas pour afficher des chaînes, mais pour afficher des données du dictionnaire ViewData ou d'un Model. Lire http://msdn.Microsoft.com/en-us/library/ee310174%28v=VS.98%29.aspx#Y0

66
Gabriele Petrioli

Je pense que vous voulez afficher "-----" si le montant est nul.

@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

C'est parce que vous n'utilisez pas correctement la méthode Display(). La surcharge que vous utilisez est Display(HtmlHelper, String) . Si vous recherchez "-" comme texte, vous devez utiliser quelque chose comme:

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

Il y a en fait deux autres façons d'afficher du texte à partir d'un bloc de code dans le rasoir en plus du @ ("") suggéré, en utilisant une balise <text> et c'est un raccourci @:

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

Le code ci-dessus s'affichera - trois fois.

1
mnwsmit