如何在ASP.NET MVC Razor中有条件地显示字段?

14

我对C#和ASP.NET MVC Razor非常陌生。我想在我的视图中显示一个字段,如果该字段不为空,则显示它。

代码

<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>
现在,如果model.phone2为空字符串,则我想输出第一个行,否则输出:

现在,如果 model.phone2 是空字符串,则我想输出第一个 <tr> 行,否则输出:

<tr id="trPhone2">

如何在ASP.NET MVC Razor中实现此操作?

5个回答

10

语法可能不完美,但请尝试这个:

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

非常好用!你也可以这样做:@Html.ActionLink(" ", "action", "controller", new { id = id }, new { @class = "btn btn-default btn_details " + @trClass }) - Lucas

8
@if (string.IsNullOrEmpty(Model.phone2))
{
    <tr class="hide" id="trPhone2">
}
else
{
    <tr id="trPhone2">
}

这个看起来很简单,但是在我的代码中却一直报错。我认为这是因为我在HTML中混入了C#代码。 - dmikester1
@dmikester1,请展示你的代码,我相信错误可以很容易地修复。 - Andrei
我最终使用了其他答案。谢谢。 - dmikester1
我把你的代码粘贴在我的其他HTML代码之间,结果提示有两个ID为trPhone2的元素,并且有两个未关闭的<tr>标签。 - dmikester1
@dmikester1,你应该用上面的片段替换第一行。否则,片段会插入一个<tr>标签,而我们代码的第一行会插入另一个 - 看起来这就是问题所在。无论如何,很高兴知道你已经找到了解决方案。 - Andrei
是的,那正是我所做的,而且一直在收到那些错误。 - dmikester1

2

只需将此字段包装在if条件中即可

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

另外,您也可以通过以下方式跳过整个字段的渲染:

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

这是更好的方法,因为它完全从dom对象中移除了该字段,因此消除了稍后被编辑的任何可能性。


1
我会在代码块中计算类名并输出。大致如下所示:
@{
   var phone2ClassName = string.IsNullOrWhiteSpace(Model.phone2) ? "hide" : string.Empty;
}

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

0
如果逻辑非常复杂,那么可以像这样使用:
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" >  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接