You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中用HTML Button提交数据报资源找不到错误的解决方法

解决ASP.NET MVC中Button提交出现“资源无法找到”的问题

看起来你遇到的核心问题是表单提交时路由匹配失败,再加上视图里存在两个提交按钮却没有区分逻辑,导致请求无法正确映射到你的Registration_ Post Action。咱们一步步来梳理解决:

问题根源分析

  1. Html.BeginForm()的默认匹配问题:你现在用的无参BeginForm()会默认沿用当前请求的路由信息,但如果视图命名、控制器路由配置有偏差,就容易出现提交时找不到对应Action的情况。
  2. 多提交按钮的逻辑冲突:表单里同时有Login和SignUp两个按钮,默认点击任意一个都会触发相同的Post请求,但你的Controller里只有处理注册的Registration_ Post Action,这不仅会导致业务逻辑混乱,也可能间接引发路由匹配异常。
  3. Action命名的小隐患:虽然下划线本身不违反规则,但特殊字符在路由解析时偶尔会出现意外,不过这不是本次问题的主要诱因。

具体解决方案

1. 明确指定表单的提交目标

修改Html.BeginForm(),手动指定要提交到的Action和Controller,彻底避免路由自动匹配出错:

@using (Html.BeginForm("Registration_", "你的控制器名称", FormMethod.Post)) {
    // 原有表单内容保持不变
}

记得把你的控制器名称替换成实际的控制器类名(比如你的控制器是AccountController,就写Account)。

2. 区分两个提交按钮的业务逻辑

因为你在同一个表单里放了登录和注册两个功能,需要给按钮添加name和value属性,让Controller能识别是哪个按钮触发的提交:

视图中修改按钮代码:

<!-- Login按钮 -->
<button type="submit" name="submitAction" value="Login">Login</button>
<!-- 注册按钮 -->
<button type="submit" name="submitAction" value="Register">SignUp/Register</button>

Controller中添加分支处理逻辑:

在Post Action里根据按钮的提交值,分别处理登录和注册逻辑:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Registration_(Registration reg, string submitAction) {
    if (submitAction == "Register") {
        // 处理注册逻辑
        if (ModelState.IsValid) {
            DB.Registrations.Add(reg);
            DB.SaveChanges();
            return RedirectToAction("Index", "Home");
        }
    } else if (submitAction == "Login") {
        // 这里添加你的登录验证逻辑,比如检查用户账号密码等
        return RedirectToAction("Dashboard", "Home");
    }
    // 如果验证失败,返回原视图并保留用户输入
    return View(reg);
}

3. 额外优化建议

  • 建议把登录和注册拆分成两个独立的表单/页面,这样业务逻辑更清晰,也能从根源上避免提交冲突问题。
  • 检查你的路由配置文件(RouteConfig.cs),确保默认路由规则能正确匹配你的Action:
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

这个默认路由可以正确匹配/你的控制器名称/Registration_这类请求。

验证步骤

  1. 修改代码后重新编译项目。
  2. 打开页面右键查看源代码,确认表单的action属性正确指向了/你的控制器名称/Registration_。
  3. 点击注册按钮,检查是否能成功跳转到Home/Index页面,同时查看数据库是否新增了注册数据。

内容的提问来源于stack exchange,提问作者Zeeshan Haider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:38:02