Как условно показать поле в ASP.NET MVC Razor?
Я очень новичок в С# и 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?
Ответы
Ответ 1
Синтаксис может быть не идеальным, но попробуйте следующее:
@{
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>
Ответ 2
@if (string.IsNullOrEmpty(Model.phone2))
{
<tr class="hide" id="trPhone2">
}
else
{
<tr id="trPhone2">
}
Ответ 3
Просто оберните это поле, если условие
@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, поэтому удаляет любую возможность редактирования позже.
Ответ 4
Я бы вычислил имя класса в блоке кода и вывел его. Что-то вроде:
@{
var phone2ClassName = string.IsNullOrWhiteSpace(Model.phone2) ? "hide" : string.Empty;
}
<tr class="@phone2ClassName" id="trPhone2">
...
Ответ 5
Если это очень сложная логика, используйте вот так:
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" >