Я пытаюсь передать 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) {
Я пробовал множество аранжировок маршрутов и просмотров, но никогда не могу подключиться.
Приведенный выше код возвращает 404 с
Requested URL: /RoomInfoes/Check/1,06-11-2014,06-11-2014
благодаря
Прежде чем использовать маршрутизацию атрибутов, убедитесь, что она включена:
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)
Также есть метод проверки действий для обслуживания запросов HttpGet? Если нет, вы получите ошибку 404.
Вы также выполнили routes.MapRoute
в RouteConfig.cs
? Это необходимо для правильного URL-адреса с @Html.ActionLink
хелпер-метода @Html.ActionLink
.
Попробуйте добавить ниже код в 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
для метода Action.