我试图将3个参数,一个int和2个datetime传递给一个没有运气的控制器。我已经创建了自定义路由,但无论我做什么,它都永远不会连接。 在我的视图中我有
@Html.ActionLink("Check Availability", "Check", new { id = item.RoomID, AD = ArrivalDate.Date.ToString("dd-MM-yyyy"), DD = DepartureDate.Date.ToString("dd-MM-yyyy") }, null)
在我的控制器中我有
[RoutePrefix("RoomInfoes")]
[Route("Check/{ID},{AD},{DD}")]
[HttpPost]
public ActionResult Check(int? id, string AD, string DD) {
我尝试了很多路线和观点,但从来没有连接过。
上面的代码返回带有
的404Requested URL: /RoomInfoes/Check/1,06-11-2014,06-11-2014
由于
答案 0 :(得分:1)
是否还有用于提供HttpGet请求的Check Action方法?如果没有,您将收到404错误。
您是否也完成了routes.MapRoute
中的RouteConfig.cs
?这是使用@Html.ActionLink
辅助方法呈现正确的URL所必需的。
尝试在RouteConfig.cs
中添加以下代码(如果尚未存在)。
routes.MapRoute(
name: "RoomInfoes",
url: "Check/{ID},{AD},{DD}",
defaults: new
{
controller = "RoomInfoes",
action = "Check",
ID = UrlParameter.Optional,
AD = UrlParameter.Optional,
DD = UrlParameter.Optional
}
);
您在动作方法上不需要Route
和RoutePrefix
属性。
答案 1 :(得分:1)
在使用属性路由之前,请确保已启用它:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes(); // add this line in your route config
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
然后装饰你的动作:
[Route("RoomInfoes/Check/{ID},{AD},{DD}")]
public ActionResult Test(int? id, string AD, string DD)
RoutePrefix已被删除,因为它只能用于类声明(代码甚至不会编译)。我删除了HttpPost属性,因为我假设您要进行GET而不是POST。
然后生成指向此操作的链接,您只需编写:
@Html.ActionLink("test", "Test", "Home", new { id = 5, AD="58", DD = "58" }, null)
结果将是:
<a href="/RoomInfoes/Check/5%2c58%2c58">test</a> (the commas in your url will be url encoded)