簡體   English   中英

'/'應用程序中的服務器錯誤。 資源無法找到。 ASP.NET MVC

[英]Server Error in '/' Application. Resource Cannot Be Found. ASP.NET MVC

我正在使用ASP.NET MVC 4 C Sharp,我有這個錯誤

'/'應用程序中的服務器錯誤。

無法找到該資源。 說明:HTTP 404.您要查找的資源(或其中一個依賴項)可能已被刪除,名稱已更改或暫時不可用。 請查看以下網址,確保拼寫正確。

請求的URL:/ 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");
    }

所以我不確定為什么即使它在正確的位置也找不到方法。 任何幫助都會很棒! 謝謝!

您的操作鏈接@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" />
}

是否將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
        });

確保您的控制器被稱為“ClerkBooking”並從方法中刪除[HttpPost]裝飾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM