ASP.NET MVC点击CheckOut按钮提示资源未找到问题求助
解决ASP.NET MVC中“资源未找到”(/User/addToCartOrderStore)问题
问题场景
开发ASP.NET MVC项目时,点击页面CheckOut按钮尝试打开addToCartOrderStore视图,触发AJAX请求/User/addToCartOrderStore时,出现“Server Error in '/' Application - 资源未找到”错误。相关代码如下:
cartDisplay.cshtml(前端代码)
@{ ViewBag.Title = "cartDisplay"; } <h2>Add to Cart Details</h2> <script src="~/kendo/js/kendo.all.min.js"></script> <div style="display: inline"> <div class="text-left"> <button class='btn btn-group-sm btn-success' onclick='submit()'>CheckOut</button> </div> </div> <div id="example"> <br /> <br /> <div id="grid"></div> <script> $(document).ready(function () { // 其他代码 }); function submit() { debugger $.ajax({ url: "/User/addToCartOrderStore", type: 'GET', cache: false, contentType: false, processData: false, success: function (response) { window.location.href = response.redirectToUrl; } }); } </script> </div>
UserController.cs(后端代码)
//Shipping Details and order details [HttpGet] public ActionResult addToCartOrderStore() { return View(); } [HttpPost] public ActionResult addToCartOrderStore(FormCollection sh) { // 业务逻辑代码 }
addToCartOrderStore.cshtml(视图文件)
@{ ViewBag.Title = "addToCartOrderStore"; } <h2>AddToCart OrderStore</h2> <script src="~/kendo/js/kendo.all.min.js"></script> <br /> <div class="navbar navbar-inverse text-center"> <div class="container text-center"> <div class="navbar-collapse collapse text-center"> <ul class="nav navbar-nav text-center"> <li>@Html.ActionLink("Logout", "Logout")</li> </ul> </div> </div> </div> <form id="form"></form> <script> $(document).ready(function () { var today = new Date(); var maxDate = today.setDate(today.getDate() + 60); $("#form").kendoForm({ layout: "grid", grid: { cols: 2, gutter: 20 }, items: [ { type: "group", label: "Customer Address", items: [ { field: "firstname", label: "First Name:", validation: { required: true } }, { field: "lastname", label: "Last Name:", validation: { required: true } } ] } ] }); }); </script>
解决方案
1. 简化跳转逻辑(推荐)
当前AJAX请求完全没必要,因为只是要打开新视图,直接修改submit函数为页面跳转即可:
function submit() { window.location.href = "/User/addToCartOrderStore"; }
2. 检查路由配置
确认RouteConfig.cs中的默认路由规则正确,确保/User/addToCartOrderStore能匹配到对应的控制器和方法:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } }
3. 验证控制器与视图路径
- 确保控制器类名为
UserController,且继承自Controller类,无拼写错误; - 确保
addToCartOrderStore.cshtml视图文件存放在~/Views/User/目录下,ASP.NET MVC默认会在此路径查找对应控制器的视图。
4. 修复AJAX请求逻辑(若需保留AJAX)
如果必须使用AJAX,需修改控制器返回格式,并调整AJAX参数:
后端修改:
[HttpGet] public ActionResult addToCartOrderStore() { return Json(new { redirectToUrl = Url.Action("addToCartOrderStore", "User") }, JsonRequestBehavior.AllowGet); }
前端修改:
function submit() { $.ajax({ url: "/User/addToCartOrderStore", type: 'GET', cache: false, success: function (response) { window.location.href = response.redirectToUrl; }, error: function(xhr) { console.log(xhr.responseText); // 打印错误详情排查问题 } }); }
注:GET请求无需设置contentType: false和processData: false,这两个参数通常用于上传文件的POST请求。
内容的提问来源于stack exchange,提问作者Rahul Patil
相关产品推荐
相关产品推荐

