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
-~----------~----~----~----~------~----~------~--~---

Reply via email to