如何在@Url.Action中传递参数?现有跳转按钮代码需扩展
给跳转按钮添加参数的解决方案
嗨,我来帮你搞定给这个跳转按钮添加参数的问题!你原来的代码运行正常,说明基础的跳转逻辑没问题,现在只需要在Url.Action里加上参数就行,分两种常见场景给你举例:
1. 传递路由参数(适合URL路径形式,比如 /ControllerName/ActionName/123)
如果你的后端Action方法是接收路由参数的,比如这样:
public ActionResult ActionName(int id) { // 你的业务逻辑 }
那你可以直接在Url.Action的第三个参数里传入匿名对象来指定参数,修改后的按钮代码如下:
<button type="button" class="btn btn-inverse btn-danger" onclick="window.location.href='@Url.Action("ActionName", "ControllerName", new { id = 123 })';"> 跳转(带路由参数) </button>
这里的123可以换成动态值,比如模型属性Model.Id或者页面里的变量,Razor会自动帮你生成正确的URL路径。
2. 传递查询字符串参数(适合?key=value形式,比如 /ControllerName/ActionName?id=123&name=test)
要是你需要传递多个参数,或者想用查询字符串的形式传参,同样用匿名对象添加多个键值对就行:
<button type="button" class="btn btn-inverse btn-danger" onclick="window.location.href='@Url.Action("ActionName", "ControllerName", new { id = 123, name = "test" })';"> 跳转(带查询参数) </button>
生成后的URL会自动拼接成带查询字符串的格式,后端Action可以直接通过参数名接收这些值。
另外给你个小优化建议:你原来代码里的@("window.location.href='" + @Url.Action(...) +"'")可以简化成直接写window.location.href='@Url.Action(...)',因为Razor会直接解析@Url.Action的输出,不需要额外的字符串拼接,代码会更简洁好读~
内容的提问来源于stack exchange,提问作者Sribin




