Asp.net core 如何在评估Razor标记的Razor页面中使用内联条件

Asp.net core 如何在评估Razor标记的Razor页面中使用内联条件,asp.net-core,razor,asp.net-core-mvc,razor-pages,Asp.net Core,Razor,Asp.net Core Mvc,Razor Pages,在我的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"

在我的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"/>
}

@if(Model.Status.Equals(“inactive”,StringComparison.OrdinalIgnoreCase))
{
@DisplayFor(model=>model.ContactName)
}
其他的
{
}

我想将其转换为内联条件。我该怎么做?我尝试了以下内容,但它不评估剃须刀标签

<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\" />"))

@(Model.Status.Equals(“非活动”,StringComparison.OrdinalIgnoreCase)?Html.DisplayFor(Model=>Model.ContactName):Html.Raw(值:$“”)

Html。Raw
用于返回非Html编码的标记。因此,它无法为标记计算
asp。您只能按以下方式进行更改,然后才能为
计算
asp。此外,它也无法为
计算
asp验证:

@(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" />
@(Model.Status.Equals(“inactive”,StringComparison.OrdinalIgnoreCase)?Html.DisplayFor(Model=>Model.ContactName):Html.EditorFor(Model=>Model.ContactName))
我建议你的第一个版本会更好


参考资料:

哦,这很愚蠢,但我认为它会起作用,因为它一直困扰着我。。。关于不显示错误或警告,请在
Html.DisplayFor
之前添加
@
,坦率地说,我认为内联条件应该用于简单语句。在你的第一个版本中,它更具可读性。使用“if”语句生成,使用上面的内联条件生成。它不会为标记计算asp。这是因为
Html.Raw
只返回非Html编码的标记。因此,在您的情况下,我建议您可以使用第一个版本。如果您确实想使用内联条件,请检查我的答案。