web-dev-qa-db-fra.com

Comment puis-je afficher conditionnellement un champ dans ASP.NET MVC Razor?

Je suis très nouveau en C # et ASP.NET MVC Razor. Je souhaite afficher un champ à mon avis s'il n'est pas vide.

Code

<tr class="hide" id="trPhone2">
            <td class="editor-label">
                @Html.LabelFor(model => model.phone2)
            </td>
            <td>
                @Html.EditorFor(model => model.phone2)
            </td>
            <td>
                @Html.ValidationMessageFor(model => model.phone2)
            </td>
        </tr>

Maintenant, je veux sortir cette première ligne <tr> si le model.phone2 is "" et sinon la sortie:

<tr id="trPhone2">

Comment est-ce que je fais ceci en utilisant ASP.NET MVC Razor?

12
dmikester1

La syntaxe n'est peut-être pas parfaite, mais essayez ceci:

    @{ 
        var trClass = string.IsNullOrEmpty(Model.phone2) ? "hide" : ""; 
    }

    <tr class="@trClass" id="trPhone2">
        <td class="editor-label">
            @Html.LabelFor(model => model.phone2)
        </td>
        <td>
            @Html.EditorFor(model => model.phone2)
        </td>
        <td>
            @Html.ValidationMessageFor(model => model.phone2)
        </td>
    </tr>
7
gwin003
@if (string.IsNullOrEmpty(Model.phone2))
{
    <tr class="hide" id="trPhone2">
}
else
{
    <tr id="trPhone2">
}
4
Andrei

Enroulez simplement ce champ dans la condition si

@if (Model.phone2=="")
{
    <tr class="hide" id="trPhone2">
}
else
{
    <tr id="trPhone2">
}
            <td class="editor-label">
                @Html.LabelFor(model => model.phone2)
            </td>
            <td>
                @Html.EditorFor(model => model.phone2)
            </td>
            <td>
                @Html.ValidationMessageFor(model => model.phone2)
            </td>
        </tr>

alternativement, vous pouvez simplement ignorer le rendu complet du champ comme celui-ci

@if (Model.phone2!="")
{

    <tr id="trPhone2">
        <td class="editor-label">
                @Html.LabelFor(model => model.phone2)
            </td>
            <td>
                @Html.EditorFor(model => model.phone2)
            </td>
            <td>
                @Html.ValidationMessageFor(model => model.phone2)
            </td>
        </tr>
}

Ce qui est une meilleure approche car il supprime entièrement le champ de l’objet dom.

2
Murtuza Kabul

Je calculerais le nom de la classe dans un bloc de code et le sortirais. Quelque chose dans le genre de:

@{
   var phone2ClassName = string.IsNullOrWhiteSpace(Model.phone2) ? "hide" : string.Empty;
}

<tr class="@phone2ClassName" id="trPhone2">
...
1
SWeko

Si c'est une logique très compliquée, utilisez comme ceci:

var trId = "";
if(Model[i].FeeType == (int)FeeTypeEnum.LateFee  
    || Model[i].FeeType == (int)FeeTypeEnum.WaivedFee)
{        
    trId=String.Format("{0}_{1}", @Model[i].ProductId, @Model[i].FeeType);
}
else
{
   trId = @Model[i].ProductId.ToString();
}  


<tr id="@trId" >  
0
Ali Adravi