从Kendo视图向控制器传递bool参数的数据类型选择
ASP.NET MVC中Ajax传递布尔值的最佳实践
传递ViewData["Deposit"]时,优先用整数类型(0表示false,1表示true),或者输出标准化的小写字符串"true"/"false",这两种方式都能让ASP.NET MVC的模型绑定正确解析布尔参数,具体原因和实现如下:
核心原因
直接输出C#布尔值会渲染为首字母大写的True/False,而JavaScript中布尔值是小写的true/false,拼接成URL参数后会变成deposit=True,ASP.NET MVC的模型绑定对大小写敏感,无法正确识别为布尔值,导致控制器参数始终取默认值false。
推荐方案
方案1:使用整数传递(兼容性最优)
修改视图中的JavaScript代码,将布尔值转为0/1:
var deposit = @((bool)ViewData["Deposit"] ? 1 : 0);
渲染后会生成var deposit = 1;或var deposit = 0;,拼接成参数deposit=1或deposit=0,控制器的deposit参数会自动解析为对应的布尔值。
方案2:使用小写字符串传递
修改视图代码,将C#布尔值转为小写字符串:
var deposit = '@((bool)ViewData["Deposit"].ToString().ToLower())';
渲染后生成var deposit = 'true';或var deposit = 'false';,拼接成deposit=true或deposit=false,模型绑定也能正确识别。
原代码问题说明
原代码中的@ViewData["Deposit"].ToBoolean()存在两个问题:
- Razor渲染后会生成
True/False,这不是JavaScript的合法布尔值,会被当作字符串处理,引发语法错误。 - 拼接成参数
deposit=True后,ASP.NET MVC无法将首字母大写的字符串解析为布尔值,控制器的deposit参数始终为默认值false。
内容的提问来源于stack exchange,提问作者user7496931
相关产品推荐
相关产品推荐

