.NET Web应用验证时出现Server Error in '/'应用程序(HTTP 404)
解决.NET MVC验证时出现的404资源未找到错误
看起来你遇到的404问题核心是路由匹配错误和缺少对应的HttpGet Action,我来一步步帮你修复:
问题根源分析
- 你的
ValidationAction只标记了[HttpPost],没有对应的[HttpGet]方法来渲染初始表单页面——当你尝试访问这个页面时,MVC找不到可以响应GET请求的Action,直接返回404。 - 默认的
Html.BeginForm()会提交到当前请求的路由,如果初始页面不是从Movie/Validation加载的,表单提交的目标地址就会出错,同样触发404。
具体修复步骤
1. 添加HttpGet版本的Validation Action
在你的MovieController里补充一个HttpGet Action,用于返回初始表单View:
using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using MVCDemon.Models; namespace MVCDemon.Controllers { public class MovieController : Controller { // 新增:处理GET请求,渲染初始表单 [HttpGet] public ActionResult Validation() { // 传递空模型给View,避免NullReferenceException return View(new Movie()); } [HttpPost] public ActionResult Validation(Movie movie) { if (ModelState.IsValid) { ViewBag.Name = movie.Name; } // 把验证后的模型传回View,保留用户已输入的内容 return View(movie); } } }
2. 明确表单提交的目标路由(可选但更稳妥)
修改View里的Html.BeginForm(),指定Action和Controller名称,避免路由匹配歧义:
<div> @model MVCDemon.Models.Movie @using (Html.BeginForm("Validation", "Movie", FormMethod.Post)) { <div> @Html.TextBoxFor(m => m.Name) @Html.ValidationMessageFor(m => m.Name) </div> <input type="submit" value="submit" /> } </div> <div> @ViewBag.Name </div>
3. 确认View文件的位置和命名
确保你的View文件放在正确的路径:~/Views/Movie/Validation.cshtml。MVC默认遵循Views/[控制器名]/[Action名].cshtml的查找规则,路径或文件名错误也会导致404。
4. 验证非侵入式配置(可选)
确认Web.config里的客户端验证配置是开启的(默认已开启,可检查确保):
<appSettings> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
做完这些修改后,你访问http://localhost:xxxx/Movie/Validation就能看到表单,提交时如果验证不通过会留在页面显示错误提示,验证通过则展示你输入的电影名称,不会再出现404错误了。
内容的提问来源于stack exchange,提问作者YANQING JING
相关产品推荐
相关产品推荐

