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

Reply via email to