Razor视图点击下载链接时控制器参数接收为null问题求助
解决Razor视图ActionLink传参为null的问题
我来帮你排查这个问题,大概率是你用错了Html.ActionLink的重载方法导致的!
先看你的原代码:
@Html.ActionLink("Download", "Download", "Admin", new { filename = Model.Resume })
这里的问题在于,Html.ActionLink有多个重载版本,当你传入四个参数时,第四个参数会被框架识别为HTML属性(比如class、id这类元素属性),而不是路由参数。这就导致你的filename参数根本没被当作路由值传递到控制器,所以控制器接收到的自然是null。
修正方案
你需要在最后额外添加一个null参数,明确告知框架:第四个参数是路由值,第五个是HTML属性(这里我们不需要设置任何HTML属性,所以传null):
@Html.ActionLink("Download", "Download", "Admin", new { filename = Model.Resume }, null)
额外排查点
如果修正后还是出现null的情况,你可以检查这两个地方:
- 确认
Model.Resume本身是否有值:在视图里临时输出@Model.Resume,看看这个属性是不是本身就是null或者空字符串。 - 检查路由配置:如果是自定义路由规则,要确保规则允许传递
filename参数。默认的路由({controller}/{action}/{id})虽然没有包含filename,但用查询字符串的方式依然可以正常传递,所以这个问题概率不大,但自定义路由时需要确认。
快速验证方法
你可以右键点击页面上的下载链接,查看它的URL地址,看看里面有没有?filename=xxx的参数部分。如果有,说明参数已经正常传递,问题可能出在控制器逻辑;如果没有,那还是视图的ActionLink写法问题。
内容的提问来源于stack exchange,提问作者Jonathan Padilla
相关产品推荐
相关产品推荐

