我使用的是ASP.NET MVC 4 C夏普,我有这个错误
'/‘应用程序中的服务器错误。 找不到资源。描述: HTTP 404。您正在寻找的资源(或其依赖项之一)可能已被删除、名称更改或暂时不可用。请检查以下URL并确保其拼写正确。
请求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");
}
所以我不知道为什么它找不到方法,即使它在正确的地方。任何帮助都会很好!谢谢!
发布于 2013-12-12 15:51:21
操作链接@Html.ActionLink("Confirm Booking", "ConfirmBooking", new {id = booking.BookingId})
将发出一个GET
请求,但是您在操作上添加了一个[HttpPost]
属性。
您可能希望将链接设置为表单post中的按钮,而不是操作链接。
下面是一个例子:
@using (Html.BeginForm("ConfirmBooking", "ClerkBooking", new { id = booking.BookingId }))
{
<input type="submit" value="Confirm Booking" />
}
发布于 2013-12-12 15:53:56
是否将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
});
发布于 2013-12-12 15:57:24
确保您的控制器名为"ClerkBooking“,并从方法中删除[HttpPost]
装饰。
https://stackoverflow.com/questions/20547926
复制相似问题