ASP.NET Core Razor:没有值的条件属性

Seb*_*zzz 4 razor asp.net-core

我想有条件地readonly<input>. 在 Razor 的 ASP.NET Core 方言中,属性的解释与 System.Web.Mvc 略有不同。

在 System.Web.Mvc 我曾经这样做:

<input name="Name" class="form-control" @(Model.MyCondition ? "readonly" : "") />
Run Code Online (Sandbox Code Playgroud)

在 ASP.NET Core 中,同样不起作用:没有错误,但也没有呈现该属性。

<input asp-for="Name" class="form-control" @(Model.MyCondition ? "readonly" : "" ) />
Run Code Online (Sandbox Code Playgroud)

一旦属性出现在 HTML 中,它就会被强制执行,所以我不能对属性的做任何事情。此代码段将导致输入始终为只读:

<input asp-for="Name" class="form-control" readonly="@(Model.MyCondition ? "readonly" : "" )" />
Run Code Online (Sandbox Code Playgroud)

现在,我可以通过创建一个响应标签的标签助手来解决这个问题is-readonly,但这对于如此简单的事情来说似乎非常复杂。

如何在不求助于自定义标签助手的情况下有条件地呈现无值属性?

Cal*_*alC 5

如果您将值设置为null当您的条件不匹配时(而不是空字符串),则不会呈现该属性,如下所示:

<input asp-for="Name" class="form-control" readonly="@(Model.MyCondition ? "readonly" : null )" />
Run Code Online (Sandbox Code Playgroud)

  • 这似乎对我不起作用。它仍然呈现没有值的“只读”属性 (3认同)
  • 这对于 ASP.NET Core 3.1 来说绝对有效;我什至检查了原始来源以确认。也就是说,我使用的是“disabled”值而不是“readonly”(但它们应该工作相同)。我还使用了“asp-for”属性,如果这有什么区别的话。 (2认同)