2012-07-25 130 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>