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


我是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>

现在,我想先输出 <tr> 行如果 model.phone2 is "" 否则输出:

<tr id="trPhone2">

我如何使用ASP.NET MVC Razor做到这一点?


4020
2018-05-29 12:39


起源



答案:


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

    @{ 
        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
2018-05-29 12:43



工作完美!谢谢 - dmikester1
奇迹般有效!你也可以这样做 @Html.ActionLink(" ", "action", "controller", new { id = id }, new { @class = "btn btn-default btn_details " + @trClass }) - Lucas


答案:


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

    @{ 
        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
2018-05-29 12:43



工作完美!谢谢 - dmikester1
奇迹般有效!你也可以这样做 @Html.ActionLink(" ", "action", "controller", new { id = id }, new { @class = "btn btn-default btn_details " + @trClass }) - Lucas


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

3
2018-05-29 12:42



这看起来很简单,但它在我的代码中抛出了错误。我想因为我正在用html混合c#in。 - dmikester1
@ dmikester1,告诉我们你的代码,我相信错误很容易修复 - Andrei
我最后使用了其他一个答案。谢谢 - dmikester1
我把你的代码粘贴在我的其他HTML之间,它说有两个带有trPhone2的id,并且有两个打开的<tr>块。 - dmikester1
@ dmikester1,你应该用上面的代码片替换第一行。否则该片段正在插入一个 <tr> 标签和我们的代码的第一行插入另一个 - 似乎这是问题。无论如何,很高兴知道你找到了解决方案。 - Andrei


只需在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对象中删除了字段,因此删除了以后编辑的任何可能性。


2
2018-05-29 12:43





我会在代码块中计算类名并输出。有点像:

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

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

1
2018-05-29 12:45



这也是正确的 - dmikester1


如果它是非常复杂的逻辑,那么使用如下:

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
2017-09-30 14:02