2013-05-03 59 views
1

你好這是我的ActionLink如何移除?並從= MVC網址

@foreach (var item in Model) 
    { 
     <div> 
      <h3> 
       @Html.ActionLink(item.Title, "Post", new { postId = item.Id, postSlug = item.UrlSlug }) 
      </h3> 
     </div> 
    } 

而且這是郵政作用的結果

public ActionResult Post(Guid postId, string postSlug) 
     { 
      var post = _blogRepository.GetPostById(postId); 
      return View("Post", post); 
     } 

,最後我已經定義在Global.asax的這條路線,以支持上述行動

routes.MapRoute("PostSlugRoute", "Blog/{Post}/{postId}/{postSlug}", 
          new 
           { 
            controller = "Blog", 
            action = "Post", 
            postId = "", 
            postSlug = "" 
           }); 

我所得到的鏈接這個

http://localhost:1245/Blog/Post?postId=554c78f1-c712-4613-9971-2b5d7ca3e017&postSlug=another-goos-post 

但我不喜歡這個!我期待這樣的事情

http://localhost:1245/Blog/Post/554c78f1-c712-4613-9971-2b5d7ca3e017/another-goos-post 

我該怎麼做才能達到這個目標?

+1

你如果你希望人們看到它,可能想爲你的問題添加適當的標籤。 – Madbreaks 2013-05-03 18:45:13

+1

例如,您可能需要標記ASP.Net和C#或VB,以及哪個版本的MVC – DOK 2013-05-03 18:45:59

+1

您必須添加一條匹配的路由到您的routestable,否則它會創建它們作爲查詢字符串 – cheedep 2013-05-03 18:48:14

回答

1

更改您的路線定義爲不具有Post作爲參數。

routes.MapRoute("PostSlugRoute", 
    "Blog/Post/{postId}/{postSlug}", // Removed the {} around Post 
    new { controller = "Blog", action = "Post", postId = "", postSlug = "" } 
); 

並確保您的路線高於MVC的默認路線。

UPDATE:有確切的例子更新我用

的Global.asax

routes.MapRoute("PostSlugRoute", 
    "Blog/Post/{postId}/{postSlug}", // Removed the {} around Post 
    new { controller = "Blog", action = "Post", postId = "", postSlug = "" } 
); 

〜/查看/博客/ Post.cshtml

@{ 
    Guid id = Guid.Parse("554c78f1-c712-4613-9971-2b5d7ca3e017"); 
    string slug = "another-goos-post"; 
    string title = "Another Goos Post"; 
} 
@Html.ActionLink(title, "Post", new { postId = id, postSlug = slug }) 
+0

我不知道它沒有做任何改變! – 2013-05-03 18:55:57

+0

然後你還有其他的東西干擾你的路由,因爲我在測試它之後複製並粘貼了一個正在運行的MVC項目的代碼,以確保它是正確的。您需要確保路線高於默認路線,這是我能想到的唯一可能會導致問題的事情。 – 2013-05-03 19:00:54

+0

是的,我已經刪除了MVC默認路由,並且這條路由是第一條 – 2013-05-03 19:07:57