如何在img的src调用控制器方法时正确传递bool类型参数
解决方案
你之前的尝试不生效主要有3个核心原因:
- 括号传参
GetImage(true)不符合HTTP URL的传参规范,ASP.NET路由无法识别,会被当做无效路径处理。 - 路由片段传参
GetImage/true不匹配默认路由规则:ASP.NET默认路由配置的第三个路径片段对应id参数,你传递的true会被赋值给id而非force,因此force会始终使用默认值false。 - 动态修改的JS代码存在选择器错误:
$("myimage")是选择<myimage>标签,你要选择id为myimage的元素需要用id选择器$("#myimage")。
正确传参方案
方案1:查询字符串传参(最通用,无需修改路由)
这是最简单的方案,不需要调整路由配置,只需要两处调整:
- (可选,针对ASP.NET Core ApiController场景)给Action的force参数添加
[FromQuery]特性,明确指定参数从查询字符串读取:
public async Task<ActionResult> GetImage([FromQuery] bool force = false) { if (force) { // 原有逻辑 return val; } else { return null; } }
- img标签的src直接用查询字符串传参即可:
<img id="myimage" src="/mycontroller/GetImage?force=true" title="my image" />
如果要动态修改src,正确的JS写法为:
$(document).ready(function () { $("#myimage")[0].src = "/mycontroller/GetImage?force=true"; });
方案2:路由片段传参
如果你想用/mycontroller/GetImage/true的格式传参,只需要给Action添加自定义路由特性即可:
[HttpGet] [Route("mycontroller/GetImage/{force:bool}")] // 加bool类型约束避免无效值 public async Task<ActionResult> GetImage(bool force = false) { // 原有逻辑 }
配置完成后<img id="myimage" src="/mycontroller/GetImage/true" title="my image" />就可以正常传递参数。
内容的提问来源于stack exchange,提问作者dwneder
相关产品推荐
相关产品推荐

