2012-07-25 223 views
0

我正在使用MVC 3,并有一个问题。而不是像我期望的那样给予mydomain/mydirectory/item我得到这个:MVC路由问题

mydomain/mydirectory/list?animal = quack。

这里是展示我是如何建立的联系在全球

//Default route mapping 
routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    new { controller = @"[^\.]*", action = @"[^\.]*" } 
); 

代码路径:

<div id="main-content" title="AnimalBox" style="float:none;"> 
     <% Html.DataList(Model.PriceListAnimals).Columns(7).Item(item => 
       { 
        item.Template(galleryImage => 
        {%> 
         <div style="margin-left:20px; line-height:150%;"> 
          <span><%= Html.ActionLink(galleryImage.AnimalName,"List",new { @animal = galleryImage.AnimalName }) %></span> 
         </div> 
         <% }); 
       }).Render(); %> 
    </div> 

任何想法?

+1

分享您用来创建链接的代码也是一个好主意。 – Amry 2012-07-25 00:48:52

回答

0

你必须定义特例路由喜欢你的情况下的路线。既然你传递'animal'作为参数,你应该创建一个路径来处理这个实例。在您的global.aspx(上面的默认路由),创建类似下面:

routes.MapRoute(
    "Animal", // A distinct Route name 
    "{controller}/{action}/{animal}", // URL with parameters 
    new { controller = "MyDirectory", action = "List"} 
); 

这将定义一个路由到具有动物的参数是不可选动作列表上mydirectory中的控制器。定义路由可以让你从html助手和其他方法(重定向到操作等)生成干净的URL。

+0

工程就像一个魅力,谢谢! – PsychoCoder 2012-07-25 05:29:51

0

的Html.ActionLink超载是:

Html.ActionLink("linkText", "actionName", "controller", object routeValues, object HtmlAttributes) 

从你说过,mydirectory =控制器和List =行动,是否正确?如果是这样,请尝试:

<%= Html.ActionLink(galleryImage.AnimalName, "List", "mydirectory", new { @id = galleryImage.AnimalName }, null) %> 

这应该产生:

<a href="/mydirectory/list/quack">quack</a>