'/'应用程序中的服务器错误。资源无法找到。 ASP.NET MVC

时间:2013-12-12 15:47:47

标签: c# asp.net-mvc-4

我正在使用ASP.NET MVC 4 C Sharp,我有这个错误

  应用程序中的服务器错误。

     

无法找到资源。描述:HTTP 404.资源你   正在寻找(或其中一个依赖)可能已被删除,   更改名称,或暂时不可用。请查阅   以下网址,并确保拼写正确。

请求的网址:/ ClerkBooking / ConfirmBooking / 22

在我的控制器中我有:

  [HttpPost]
    [ValidateAntiForgeryToken]
    [Authorize(Roles = "Booking Clerk")]
    public ActionResult ConfirmBooking(int id = 0)
    {
       if (ModelState.IsValid)
       {
            //Find the booking
            Booking booking = db.Bookings.Find(id);

            //Get RoomID of Preferred Room.
            int roomId = Convert.ToInt32(db.Rooms.Find(booking.PreferredRoom));

            //Set RoomID of Booking.
            booking.RoomId = roomId;

            //Save Changes.
            db.SaveChanges();
        }

        return View("Index");
    }

所以我不确定为什么它找不到方法,即使它在正确的位置。任何帮助都会很棒!谢谢!

3 个答案:

答案 0 :(得分:2)

您的操作链接@Html.ActionLink("Confirm Booking", "ConfirmBooking", new {id = booking.BookingId})将发出GET请求,但您在该操作上添加了[HttpPost]属性。

您可能希望将链接设置为表单帖子中的按钮而不是操作链接。

以下是一个例子:

@using (Html.BeginForm("ConfirmBooking", "ClerkBooking", new { id = booking.BookingId }))
{
    <input type="submit" value="Confirm Booking" />
}

答案 1 :(得分:0)

是否将AntiForgeryToken添加到您的html文件中?

@using (Html.BeginForm("Manage", "Account")) {
    @Html.AntiForgeryToken()
}

如果没有,那么很可能asp.net mvc阻止了你的控制器。

另外,请不要忘记使用以下参数检查Global.asax:

   public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "ClerkBooking", action = "ConfirmBooking", id = UrlParameter.Optional } // Parameter defaults
            );

        }

否则你必须从外面声明你的id对象。

 $.ajax("/ClerkBooking/ConfirmBooking/?id=22", {
            type: "POST",
            contentType: "application/json; charset=utf-8",
            success: function (result) {

               //Do Something

                }
            }
        }).fail(function () {
                         //Do Something
        });

答案 2 :(得分:0)

确保您的控制器名为“ClerkBooking”并从方法中删除[HttpPost]装饰。