Asp.net core ASP.NET核心剃须刀:无值的条件属性

Asp.net core ASP.NET核心剃须刀:无值的条件属性,asp.net-core,razor,Asp.net Core,Razor,我想在中有条件地呈现只读属性。在Razor的ASP.NET核心方言中,属性的解释与System.Web.Mvc略有不同 在System.Web.Mvc中,我曾经做过: <input name="Name" class="form-control" @(Model.MyCondition ? "readonly" : "") /> 在ASP.NET Core中,同样的方法不起作用:没有错误,但属性也不会呈现 <input asp-for="Name" class="form

我想在
中有条件地呈现
只读属性。在Razor的ASP.NET核心方言中,属性的解释与System.Web.Mvc略有不同

在System.Web.Mvc中,我曾经做过:

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

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

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

一旦属性出现在HTML中,它就会被强制执行,因此我无法对属性的值进行处理。此代码段将导致输入始终为只读:

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

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


如何有条件地呈现无值属性而不求助于自定义标记帮助程序?

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

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


I在razor页面中测试它在我这边起作用,当MyCondition为true时,它会显示
readonly
属性,您能分享复制的步骤吗?这似乎对我不起作用。它仍然呈现“readonly”属性,而不显示值。请看: