views:

75

answers:

3

I have a Customer list that will have Invoices and Emails linked to it.

I have my customer/details/1 and customer/edit/1 working as per the default route but would like to have it instead be like below

  • customer - Lists customers
  • customer/1/edit - Edit Customer ID 1
  • customer/1/details - Details of Customer ID 1
  • customer/1/invoice - Invoice List for Customer ID 1
  • customer/1/invoice/3 - Details of Invoice ID 3 for Customer ID 1

I setup the following route (before the default route)

routes.MapRoute("CustomerActions", 
    "customer/{customerid}/{action}/{id}",
    new { controller = "customer", action = "details", id="" } 
);

Which seems to work, but in my customer edit view I have an ActionLink like

<%=Html.ActionLink("Back to List", "Index") %>

But it gives the URL

/customer/1/index rather than just /customer or /customer/index

A: 

Did you try

"{controller}/{action}/{id}",
            //    new { controller = "Customer", action = "Details", id = ""}

No need for the customer to be present in your routemap.

CodeToGlory
But then if I specify customer/1/details it will treat 1 as the action and details as the id
Simon
A: 

your route is "customer/{customerid}/{action}/{id}"

you specify action = "Index", it takes customerid from the current request (in your case, 1) and we have /customer/1/index

/customer/1 would be controller="customer", customerid = 1, action="details" according to your defaults

/customer will not match the route, cause you do not have defaults for customerid

limpalex
A: 

You can try with two routes :

routes.MapRoute("Customer", 
    "customer/{customerid}/{action}/{id}",
    new { controller = "customer", action = "details", id="" } 
);

routes.MapRoute("Customers", 
    "customer",
    new { controller = "customer", action = "List" } 
);

And as for the link :

<%=Html.RouteLink("Back to List", "Customers", null) %>
çağdaş