You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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()存在两个问题:

  1. Razor渲染后会生成True/False,这不是JavaScript的合法布尔值,会被当作字符串处理,引发语法错误。
  2. 拼接成参数deposit=True后,ASP.NET MVC无法将首字母大写的字符串解析为布尔值,控制器的deposit参数始终为默认值false。

内容的提问来源于stack exchange,提问作者user7496931

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:13:20