In order to get routing to work, you map * to Monorail, meaning all static requests also tries to get served by monorail.
Personally I have all static material in a /static/ folder, which I set to it's own application, with a static file handler (no monorail- handler). On 11 feb 2009, at 16:27, eyal wrote: > > Hi Jimmy, > > Works great. > > Also I noticed that images on searchresult page/s disappeared. I am > assuming that it has to do with the re-writing of the url. Any idea of > how to fix this? > > this is how I pull the image to display on page: > <img name="Image_$cnt" alt="$Html.HtmlEncode($row.Title)" > src="../container/images/product_images/thumb$image.FileId" > border="0"/ >> > > Thanks > Eyal > > On Feb 11, 1:26 am, Jimmy Shimizu <[email protected]> wrote: >> 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 <[email protected]> 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 <[email protected]> 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
