【问题标题】:How to use inline condition in Razor Pages that evaluates Razor tags如何在评估 Razor 标签的 Razor 页面中使用内联条件
【发布时间】:2020-02-23 02:03:43
【问题描述】:

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

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

【问题讨论】:

  • 哦,这很愚蠢,但我认为它会起作用,因为它让我很困扰......关于不显示错误或警告在Html.DisplayFor之前添加@
  • 坦率地说,我认为内联条件应该用于简单的语句。在您的第一个版本中更具可读性。

标签: asp.net-core razor asp.net-core-mvc razor-pages


【解决方案1】:

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 Method

【讨论】:

  • 以上不起作用。使用 'if' 语句产生 使用内联像上面这样的条件会产生这种情况。它不评估 asp-for 标签。
  • 那是因为Html.Raw 只是返回不是 HTML 编码的标记。所以在你的情况下,我建议你可以使用你的第一个版本。如果你真的想使用内联条件,请检查我的回答。
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2019-06-22
  • 2021-04-22
  • 2023-02-08
  • 2020-05-06
  • 2020-05-16
  • 2019-04-06
相关资源
最近更新 更多