ASP.NET MVC中ViewBag赋布尔值后input与label显示值不一致问题
原因说明
- Razor引擎针对HTML布尔属性(如
checked、disabled、selected这类不需要赋值的原生属性)做了特殊渲染适配:当给HTML属性赋值的内容是布尔类型的true时,Razor会直接输出属性名本身,不会输出True字符串;如果赋值为布尔类型的false,则会完全省略这个属性。 - 你的代码中
ViewBag.SomeThingERR是布尔值true,所以写value="@ViewBag.SomeThingERR"时,Razor最终渲染出来的HTML代码为<input type="text" id="SomeThingERR2" value />,浏览器解析无赋值的value属性时,就会出现输入框显示异常的情况。 - 而在
label后直接输出@ViewBag.SomeThingERR时,属于渲染普通文本节点,Razor会自动调用布尔值的ToString()方法,输出字符串True,这就是两者显示不一致的根本原因。
解决方法
只需要将布尔值显式转换为字符串,避开Razor的布尔属性特殊处理逻辑即可,修改视图的input代码:
<!-- 显式调用ToString方法即可 --> <input type="text" id="SomeThingERR2" value="@ViewBag.SomeThingERR.ToString()" /> <label>SomeThingERR:</label> @ViewBag.SomeThingERR
如果需要自定义输出的字符串格式(比如小写的true/false),也可以手动判断输出:
<input type="text" id="SomeThingERR2" value="@(ViewBag.SomeThingERR ? "true" : "false")" />
内容的提问来源于stack exchange,提问作者Hong Van Vit
相关产品推荐
相关产品推荐

