首页 > 解决方案 > 如何在评估 Razor 标签的 Razor 页面中使用内联条件

问题描述

我的剃须刀页面中有以下代码,它工作正常。

<dd class="col-sm-6">
@if (Model.Status.Equals("inactive", StringComparison.OrdinalIgnoreCase))
{
    @Html.DisplayFor(model => model.ContactName)
}
else
{
    <input asp-for="Model.ContactName" class="form-control" /><span asp-validation-for="Model.ContactName" class="text-danger"/>
}

我想将其转换为内联条件。我怎样才能做到这一点?我正在尝试以下操作,但它不评估剃刀标签。

<dd class="col-sm-6">
@(Model.Status.Equals("inactive", StringComparison.OrdinalIgnoreCase)?Html.DisplayFor(model => model.ContactName):Html.Raw(value: $"<input asp-for=\"{Model.ContactName}\" class=\"form-control\" /><span asp-validation-for=\"{Model.ContactName}\" class=\"text-danger\" />"))

标签: asp.net-corerazorasp.net-core-mvcrazor-pages

解决方案


Html.Raw用于返回不是 HTML 编码的标记。因此它无法评估asp-for标签。您只能像下面这样更改,然后您可以评估asp-for。它也无法评估asp-validation-for

@(Model.Status.Equals("inactive", StringComparison.OrdinalIgnoreCase) ? Html.DisplayFor(model => model.ContactName) : Html.EditorFor(model => model.ContactName))
<span asp-validation-for="Model.ContactName" class="text-danger" />

我建议你的第一个版本会更好。

参考:HtmlHelper.Raw 方法


推荐阅读