Как передать параметры DateTime из View в контроллер в ASP.net MVC5?

1

Я пытаюсь передать 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

благодаря

  • 0
    Это работает, если вы удаляете даты и передаете только int? Под удалением я имею в виду и контроллер.
  • 0
    Да, int передается. Но других параметров нет.
Показать ещё 1 комментарий
Теги:
asp.net-mvc
parameters

2 ответа

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)
  • 0
    Большое спасибо за ваш исчерпывающий ответ! Я действительно ценю время, которое вы потратили, чтобы сделать это
1

Также есть метод проверки действий для обслуживания запросов 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню