Today I plan to finish up the last part of the prioritizing of Product Backlog Items (see Session 19). That is, TDD the controller and then wrap the GUI.
Let’s go!
Whooa – I ran into some problems with routing. Some problems that took me about two sessions (read: hours) to solve. To not bore you with details or meaningless posts of me scratching my head, I’ll sum it up in this post.
Here is the layout of the “problem”: I have an Action-method with two parameters:
public ActionResult PrioUp(int productID, int productBacklogItemID)
OK – but how do I create a link to that method? Well, by using the Html-helper ActionLink-method, of course. You define an anonymous object with the route values. Here is my example:
Html.ActionLink("Prio up", "PrioUp", "ProductBacklogItem", new { productID = Model.ID, productBacklogItemID = item.ID }, null);
OK – but here come the problems. I have no routing-table entry for sending two parameters. I was hanging around, trying stuff out, screaming loudly, hammering the keyboard. I just don’t get the routing-stuff yet…
So finally I added this routing-table entry, first of the entries:
// http://localhost/ProductBacklogItem/PrioUp/productId/productBacklogItemID
// http://localhost/ProductBacklogItem/PrioUp/1001/2
routes.MapRoute(
"ProductBacklogPrio", // Name
"{controller}/{action}/{productId}/{productBacklogItemID}", // Url with parameters
new { controller = "ProductBacklogItem" }, // Parameter defaults
new { productId = @"\d+", productBacklogItemID = @"\d+" } // Constraints
);
That worked! I cannot say that I fully understand why since I thought that I tried it… but naming issues and not concentrating well enough.
A few things to note:
- It has been very helpful to specify an example of how I wanted the URL to look.
- I had to specify the full URL ({controller}/{action}/{productId}/{productBacklogItemID}) to get it to work.
- I skipped default values for productID and productBacklogItemID since that makes no sense.
- The final row is a constraint that states that productID and productBacklogItemID should be numeric.
These problems and a tip from Christer made me decide to pause this project for a while. There is a new book on ASP.NET MVC coming out soon which contains a tutorial chapter that looks very nice. You can download it here.
I will run through that chapter and hope that it won’t take me too long and also that I’ll learn a lot of stuff that come in handy in the Sprint Planner Helper project.
In fact (and this is a secret) I love doing these walkthroughs – feels like I know something very well…
Alright – but now I have a way to prioritize product backlog items up and down.
See ya in a while.