Asp.Net Core MVC点击按钮跳转指定控制器Action方法的实现问题
最优实现方案(无JS、无样式冲突)
Asp.Net Core MVC 中最简单的实现方式是直接使用 Razor Tag Helper 修饰超链接标签,将其伪装为按钮,完全不需要依赖 JavaScript 也不需要嵌套 form 标签,不会破坏原有样式:
- 首先确认项目的
Views/_ViewImports.cshtml文件中已引入 Tag Helper 注册代码(默认创建的项目都会自带):
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
- 直接用
<a>标签替换原有 button,复用你现有的按钮样式类即可:
<a asp-action="Index" asp-controller="Home" class="dropbtn glyphicon glyphicon-user">Log in</a>
这个方案本质是用超链接实现原生跳转,<a> 标签应用按钮样式后视觉上和原生按钮完全一致,没有任何副作用。
如果你必须使用原生 <button> 标签
如果业务要求必须用 <button> 元素而非超链接,可以通过调整 form 标签的样式解决布局错乱问题:form 默认为块级元素,会独占一行导致样式偏移,只要将其设置为行内元素即可:
@using (Html.BeginForm("Index", "Home", FormMethod.Get, new { style = "display:inline;" })) { <button type="submit" class="dropbtn glyphicon glyphicon-user">Log in</button> }
注意这里改用 FormMethod.Get 更符合普通跳转的 HTTP 语义,不会触发不必要的表单提交逻辑。
之前方案报错/失效的原因说明
@Html.ActionLink会生成完整的<a>标签代码,直接放入onclick属性中相当于把 HTML 代码嵌入 JS 执行上下文,自然只会显示原始文本- 你参考的旧方案中
<%: %>是 ASP.NET 旧版 Web Forms 视图引擎的语法,Asp.Net Core 已全面改用 Razor 语法,所以会报语法错误 - 嵌套 form 导致样式错乱是因为 form 默认块级元素的布局特性,修改 display 属性即可解决
内容的提问来源于stack exchange,提问作者Grazosi
相关产品推荐
相关产品推荐

