我正在使用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");
}
所以我不确定为什么它找不到方法,即使它在正确的位置。任何帮助都会很棒!谢谢!
答案 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]
装饰。