netchicken
netchicken

Reputation: 485

How do I pass DateTime parameters from View to Controller in ASP.net MVC5?

I am trying to pass 3 parameters, one int, and 2 datetime to a controller with no luck. I have created custom Routes, but no matter what I do it never connects. In My View I have

@Html.ActionLink("Check Availability", "Check", new { id = item.RoomID, AD = ArrivalDate.Date.ToString("dd-MM-yyyy"), DD = DepartureDate.Date.ToString("dd-MM-yyyy") }, null)

In my Controller I have

   [RoutePrefix("RoomInfoes")]
   [Route("Check/{ID},{AD},{DD}")]
    [HttpPost]
    public ActionResult Check(int? id, string AD, string DD) {

I have tried numerous arrangements of routes and views, but never can connect.

The code above returns a 404 with

Requested URL: /RoomInfoes/Check/1,06-11-2014,06-11-2014

Thanks

Upvotes: 1

Views: 2081

Answers (2)

Marian Ban
Marian Ban

Reputation: 8168

Before you use attribute routing make sure you have it enabled:

    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 }
        );
    }

then decorate your action like this:

[Route("RoomInfoes/Check/{ID},{AD},{DD}")]
public ActionResult Test(int? id, string AD, string DD)

The RoutePrefix has been removed because it can be used only on class declaration (the code will even doesn't compile). I removed the HttpPost attribute because I assumed that you want make a GET instead of POST.

then to generate a link pointing to this action you can simply write:

@Html.ActionLink("test", "Test", "Home", new { id = 5, AD="58", DD = "58" }, null)

the result will be:

<a href="/RoomInfoes/Check/5%2c58%2c58">test</a> (the commas in your url will be url encoded)

Upvotes: 1

Venu
Venu

Reputation: 66

Do also have the Check Action method for serving HttpGet requests? If not, you will get 404 error.

Have you also done the routes.MapRoute in the RouteConfig.cs? This is required to render the correct URL with @Html.ActionLink helper method.

Try adding below code in RouteConfig.cs, if not already exists.

routes.MapRoute(
            name: "RoomInfoes",
            url: "Check/{ID},{AD},{DD}",
            defaults: new
            {
                controller = "RoomInfoes",
                action = "Check",
                ID = UrlParameter.Optional,
                AD = UrlParameter.Optional,
                DD = UrlParameter.Optional
            }
            );

You don't Need Route and the RoutePrefix attribute on the Action method.

Upvotes: 1

Related Questions