user17697729
user17697729

Reputation:

Routing with multiple parameters in ASP.NET MVC

I'm new to ASP.NET and I'm struggling to understand how routing works. In my project I've managed to create routing for; login, logout, create new user and delete user.

I've created cards containing dates and a stretched-link with the purpose to act as a booking-table (click on a card to book the said time).

View code:

When I click on the link I want to pass forward the user as a string and the time as DateTime(or string). If I replace the url.action argument "TimeSlot.ToString()" with null my routing "works", but of course with the exception that only the user is passed forward to my controller.

@model MyProject.Models.BookingSchedule
...       
<div class="row" style="padding-top: 50px; border:solid">
        @{ foreach (var TimeSlot in Model.GetAllAvailableTimes())
            {
                <div class="col-sm-1" style="padding:10px">
                    <div class="card text-md-center">
                                <a class="stretched-link" href="@Url.Action("BookTime","Booking",new { user = Model.UserName }, TimeSlot.ToString())">@TimeSlot.ToString()</a>
                    </div>
                </div>
            }
        }
    </div>

Controller:

So far I've just created a mockup code for my controller, its only purpose is to reload my view and redisplay available times together with the time I've booked. For now, I just want to see if my routing passes all parameters to my controller (which it doesn't):

        public ActionResult BookTime(string user, string Time)
    {
        return View("BookingPage", bookingSchedule(user));
    }

Routing:

            routes.MapRoute(
            "BookTime",
            "Booking/{Action}/{user}/{time}",
            new { controller = "Booking", action = "BookTime", user = UrlParameter.Optional, time = UrlParameter.Optional }
        );

When I run my code I get the following error: error

https://i.sstatic.net/VICqV.png

How do I create a routing with two or more parameters and what are the key aspects that I need to keep in mind?

I've tried to get knowledge from the Microsoft-docs but as I've not yet managed to overcome this issue I'm hoping someone here could explain it. https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-6.0#attribute-routing

If I set my href to "href="@Url.Action("BookTime","Booking",new { user = Model.UserName }, TimeSlot.ToString())" then I get the error message above.

If I set href to href="@Url.Action("BookTime","Booking",new { user = Model.UserName }, null)" it will route correctly but of course it doesn't pass my parameters (see photo below):

enter image description here

(in the picture/code above I changed the name of the controller to BookingPage as is the name of my viewpage. I did this to rule out any routing issues)

Upvotes: 0

Views: 240

Answers (1)

Serge
Serge

Reputation: 43860

just add an attribute route

   [Route("~/Booking/BookTime/{user?}/{time?}",
   public ActionResult BookTime(string user, string Time)
    {
        return View("BookingPage", bookingSchedule(user));
    }

and fix your link

 href= ( "Book Time",
         "BookTime",
         "Booking", 
         new { user = Model.UserName, time = TimeSlot.ToString() }, 
         null )

Upvotes: 0

Related Questions