you need to name the params in your route to the same thing as what you pass on to the UrlHelper, like this:
rules.Add(new PatternRoute("/<controller>/<name>/<productId>/ <action>.ashx") I guess you need to skip the action aswell, since you define a default, that's not needed: rules.Add(new PatternRoute("/<controller>/<name>/<productId>/") .DefaultForAction().Is("searchresult") .Restrict("productId").ValidInteger); eyal wrote: > Now I'm closer to a real solution > > see changes: > >> public static void Register(IRoutingRuleContainer rules) >> { >> > rules.Add(new PatternRoute("/<controller>/<name>/<id>/ > <action>.ashx") > .DefaultForArea().IsEmpty > .DefaultForAction().Is("searchresult") > .Restrict("id").ValidInteger); > } > > in view > > #foreach($Product in $Products) > >> <li>$Url.Link($Product.Name, "%{controller='products', >> action='searchresult', >> querystring='productId=$Product.Id,params={id=$Product.Id, >> name=$Product.Name}}")</ >> li> >> #end >> > > The resulted url: > .../specials/myproduct/11/searchresult.ashx?productId=11 > > However I want the url to appear as such .../specials/myproduct/11/ > > How can I do this? > > thanks > > eyal > > > On Feb 10, 4:43 pm, eyal <ebarda...@gmail.com> wrote: > >> I looked into your suggestions and that is what I decided to do: >> #foreach($Product in $Products) >> <li>$Url.Link($Product.Name, "%{controller='products', >> action='searchresult', params={id=$Product.Id, name=$Product.Name}}")</ >> li> >> #end >> >> public static void Register(IRoutingRuleContainer rules) >> { >> rules.Add(new PatternRoute("/products/productId/ >> searchresult.ashx") >> .DefaultForArea().IsEmpty >> .DefaultForAction().Is("searchresult")); >> >> } >> >> When I click on the generated link I get the following error within >> the BaseHttpHandler.cs in func. Process(HttpContext context): >> " ex = {Unable to evaluate expression because the code is optimized or >> a native frame is on top of the call stack.}" >> >> Any idea why? >> >> thanks >> >> Eyal >> >> On Feb 10, 3:06 pm, Jimmy Shimizu <jimmy.shim...@gmail.com> wrote: >> >> >>> the UrlHelper will be able to generate urls if you have a matching >>> rule for it. >>> >>> $Url.For("%{controller='product', action='view', >>> params={name='ProductName'}}") would generate a URL if you have a >>> valid route, I guess like this: >>> >>> RoutingModuleEx.Engine.Add( >>> new PatternRoute("/<controller>/<name>") >>> .DefaultForAction().Is("view")); >>> >>> You can add restrictions for it if you like. >>> >>> This would make: >>> >>> /product/ProductName >>> >>> call ProductController, on action View(string name) where name = >>> 'ProductName'. >>> >>> You would need to internally map 'ProductName' to the approriate id in >>> your action aswell as use the correct ProductName in your UrlHelper in >>> the view. >>> >>> I would however combine productname with the id instead, like this: >>> >>> /product/15/product-name >>> >>> so that I would get 15 in my view, without the need for any mapping. >>> This however needs another route than the one I supplied. >>> >>> Hope this helps. >>> >>> On 10 feb 2009, at 22:22, eyal wrote: >>> >>>> Hi All, >>>> >>>> I am interested in re-writing some of my urls to make them url >>>> friendly. I found this >>>> bloghttp://using.castleproject.org/display/MR/Routing+Overview >>>> >>>> My agenda is to convert the following: >>>> .../controllerName/searchresult.ashx?categoryId=23 >>>> >>>> into >>>> >>>> .../controllerName/categoryName >>>> >>>> where each categoryId is associated with a Category Name >>>> >>>> Also I am not sure how to associate the two following code snippets >>>> found on blog: >>>> Code: >>>> >>>> RoutingModuleEx.Engine.Add( >>>> new PatternRoute("/<controller>/<name>/<id>/view.aspx") >>>> .DefaultForAction().Is("view") >>>> .Restrict("id").ValidInteger >>>> ); >>>> >>>> I found that just by using the $UrlLink(... on my view I can re-write >>>> a url. But the url is not initially generated into the browser's url >>>> address. Instead it appears as a hyper link on the page. Once clicked >>>> only then it will re-write the url address in the browser - that is >>>> useless to me. What am I missing here? >>>> >>>> Code: >>>> >>>> $Url.Link('Product Name', "%{controller='product', action='view', >>>> params={id=15, name='ProductName'}}") >>>> >>>> Thanks >>>> >>>> Eyal >>>> > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to castle-project-users@googlegroups.com To unsubscribe from this group, send email to castle-project-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---