Razor语法中用C#变量设置HTML按钮disabled属性失效问题排查
问题原因及解决方案
问题根源
你直接通过字符串变量输出disabled属性的方式不符合Razor的HTML属性解析规则。Razor对布尔属性(比如disabled、checked这类只要存在就生效的属性)有专门的处理逻辑,直接输出字符串无法被正确识别为合法属性,导致按钮的禁用状态不生效。
两种正确实现方式
方式一:直接使用Razor条件属性语法(推荐)
这是Razor官方推荐的简洁写法,直接在属性中绑定布尔值,Razor会自动处理属性的渲染:
<div class="form-group row my-4"> <button class="col-sm-3 btn btn-success" disabled="@EditFormParameter.SendingCompleted" type="button">Send</button> </div>
- 当
EditFormParameter.SendingCompleted为true时,Razor会渲染出disabled属性; - 当值为
false时,该属性会被完全忽略,不会出现在最终的HTML中。
方式二:使用@attributes指令(适合多属性动态场景)
如果需要动态控制多个属性,可以把属性存入字典,再通过@attributes指令渲染:
@{ var btnAttributes = new Dictionary<string, object>(); if (EditFormParameter.SendingCompleted) { btnAttributes["disabled"] = "disabled"; } } <div class="form-group row my-4"> <button class="col-sm-3 btn btn-success" @attributes="btnAttributes" type="button">Send</button> </div>
这种方式会让Razor正确解析字典中的键值对,将其转换为对应的HTML属性。
内容的提问来源于stack exchange,提问作者DmitryB
相关产品推荐
相关产品推荐

