首页 > 解决方案 > ASP.NET Core Razor:没有值的条件属性

问题描述

我想有条件地readonly<input>. 在 Razor 的 ASP.NET Core 方言中,属性的解释与 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,但对于如此简单的事情来说,这似乎非常复杂。

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

标签: asp.net-corerazor

解决方案


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

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

推荐阅读