ASP.NET MVC C# Routing - Passing a null integer

2019-07-02 00:41发布

问题:

I'm working with MVC 3 in a web app and i'm facing a problem in routing.

I'm defining my router handler like this:

           routes.MapRoute(
           "Users", 
           "{controller}.aspx/{action}/{id}/{page}", // URL with parameters
           new { controller = "Users", action = "Details", id = UrlParameter.Optional, page = UrlParameter.Optional } // Parameter defaults
       );

The url is: http://app.domain/Users.aspx/Details/114142/5 (example)

I'm sucefully getting the id of the user, but i can't get the page number.

The controller of users is initialized like this:

           public ActionResult Details(long id, int? page)

The page is always returning null (i need the page as a null integer).

And i defining the route wrong?

Thanks

回答1:

id cannot be optional if page is optional. Only the last parameter of a route definition can be optional.

So :

routes.MapRoute(
    "Users", 
    {controller}.aspx/{action}/{id}/{page}",
    new { 
        controller = "Users",  
        action = "Details", 
        page = UrlParameter.Optional 
    }
);

and then: /Users.aspx/Details/114142/5 will successfully map to

public ActionResult Details(long id, int? page)
{
    ...
}


回答2:

You are using a wrong URL. Try this:

http://app.domain/Users.aspx/Details/114142?page=5