ASP.NET Core MVC如何按路由名称设置表单按钮路由?
解决方案:在表单中使用ASP.NET Core命名路由
你找对思路啦——既然已经定义了命名路由nextOne,就不需要依赖asp-action(它会直接绑定Action方法名,走默认路由逻辑),而是要用**asp-route标签助手**来指定你想使用的路由名称。
具体代码修改
把你的表单代码改成这样即可:
<form asp-route="nextOne"> <button type="submit">按名称路由</button> </form>
为什么这样有效?
当你在<form>上添加asp-route="nextOne"时,ASP.NET Core的标签助手会自动匹配你在Startup.cs中定义的同名路由规则:
endpoints.MapControllerRoute( name: "nextOne", pattern: "home/magic", defaults: new { controller = "Home", action = "Magic" } );
它会根据这个路由的pattern生成对应的URL(也就是/home/magic),并自动设置为表单的action属性值。用户点击按钮提交表单时,请求就会被精准路由到Home控制器的Magic方法,完全符合你的需求。
扩展:如果命名路由带参数怎么办?
假设你的命名路由需要传递参数,比如:
endpoints.MapControllerRoute( name: "nextOneWithId", pattern: "home/magic/{id}", defaults: new { controller = "Home", action = "Magic" } );
你可以通过asp-route-*格式的属性来传递参数,示例代码如下:
<form asp-route="nextOneWithId" asp-route-id="123"> <button type="submit">按带参数的命名路由跳转</button> </form>
这样生成的表单action会是/home/magic/123,完美匹配带参数的路由规则。
内容的提问来源于stack exchange,提问作者user10573717
相关产品推荐
相关产品推荐

