表单提交后跳转报HTTP 404错误,请求技术排查解决
404错误排查与解决
错误原因分析
表单提交目标与控制器POST Action不匹配
表单的action指定为CheckRequestsLists,但控制器中处理POST请求的方法被[ActionName("ReuestResource")]重命名,导致POST请求找不到对应的Action方法,触发404。跳转逻辑存在问题
即使POST方法执行,RedirectToAction("CheckRequestsLists", test)会尝试跳转到CheckRequestsLists的GET方法,但:
- 可能不存在对应的GET
CheckRequestsListsAction; - 直接将集合
test作为路由参数传递,路由系统无法解析,导致跳转后依然404。
- 参数硬编码问题
代码中硬编码Submitted_By == "phuuser",没有使用表单提交的实际用户值,不符合业务逻辑。
解决步骤
1. 修正表单提交目标
将表单的action改为控制器中定义的POST Action名称:
<form action="@Url.Action("ReuestResource", "Home")" method="post" > <!-- 其余表单内容不变 --> </form>
2. 修正控制器逻辑
更新POST方法,接收表单参数并正确传递数据到GET视图:
[HttpPost] [ActionName("ReuestResource")] public ActionResult CheckRequestsLists(string Submitted_By) { // 使用表单提交的用户值查询数据 var requestsList = Requestsdbo.Requests.Where(x => x.Submitted_By == Submitted_By).ToList(); // 用TempData临时存储数据,传递到GET方法 TempData["RequestsList"] = requestsList; // 跳转到GET类型的CheckRequestsLists Action return RedirectToAction("CheckRequestsLists"); } // 添加对应的GET Action,用于渲染视图 public ActionResult CheckRequestsLists() { // 从TempData获取数据,转为对应模型类型 var requests = TempData["RequestsList"] as List<Requests>; // 将模型传递给视图 return View(requests); }
3. 确保视图存在
在Home控制器对应的视图文件夹下,创建CheckRequestsLists.cshtml视图,接收并展示模型数据:
@model List<Requests> <h2>所有请求列表</h2> @if(Model != null && Model.Count > 0) { <table> <!-- 这里根据你的模型字段渲染表格内容 --> <tr> <th>提交人</th> <!-- 其他字段列 --> </tr> @foreach(var item in Model) { <tr> <td>@item.Submitted_By</td> <!-- 其他字段内容 --> </tr> } </table> } else { <p>暂无请求数据</p> }
4. 额外检查
- 确认
Home控制器类存在,且继承自Controller; - 检查路由配置(
RouteConfig.cs)是否为默认路由:
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
- 修正
ActionName的拼写错误(如果是笔误:ReuestResource→RequestResource,需同步修改表单和控制器的名称)。
内容的提问来源于stack exchange,提问作者Yanal Abuora
相关产品推荐
相关产品推荐

