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

MVC局部视图Ajax表单无法复用方法?提交时出现404错误求助

问题原因与解决方案

这个404错误的核心原因非常明确:你在局部视图的Ajax.BeginForm里指定控制器时多写了"Controller"后缀。

MVC路由系统遵循既定约定:当你指定控制器名称时,只需要写去掉"Controller"后缀的部分。比如你的控制器类是AnotherController,那么在路由中应该用"Another"来指代它。你写了"AnotherController",MVC会尝试寻找一个名为AnotherControllerController的控制器——显然这个控制器不存在,于是路由系统就 fallback 到当前请求上下文的Cars控制器,导致请求地址变成了Cars/AddManufacturer,自然就返回404了。

解决步骤

1. 修正控制器名称参数

把局部视图里的Ajax.BeginForm控制器参数改成不带后缀的"Another":

@using (Ajax.BeginForm("AddManufacturer", "Another", new AjaxOptions { HttpMethod = "POST" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
    // 你的表单字段
}

2. (可选)强制隔离路由上下文

如果修正后还是出现路由继承的问题(比如父视图的路由参数干扰),可以明确传入空的路由值对象,避免继承父视图的controller等参数:

@using (Ajax.BeginForm("AddManufacturer", "Another", new { }, new AjaxOptions { HttpMethod = "POST" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
    // 你的表单字段
}

3. 验证目标控制器方法的正确性

同时确认AnotherController里的AddManufacturer方法是正确的:

  • 标记了[HttpPost]特性
  • 是public访问级别
  • 参数模型与表单提交的数据匹配

示例方法:

[HttpPost]
public ActionResult AddManufacturer(ManufacturerViewModel model)
{
    if (ModelState.IsValid)
    {
        // 处理制造商添加逻辑
    }
    // 返回局部视图更新页面内容
    return PartialView("_Manufacturer");
}

这样修改后,Ajax表单就能正确指向Another/AddManufacturer,不会再请求错误的控制器了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:59:51