0

電流動作PARAMS我在MVC3應用工作。爲什麼我的看法動作鏈接包括MVC3

在我看來,我正在使用@ Html.ActionLink錨鏈接。每件事情都很好。 但這些鏈接包括鏈接當前URL的PARAMS。

如果我目前的鏈接所產生的http://localhost:25466/Blog/Blog/shoes/2

在上面的鏈接其實我沒有做任何事情在URL中包括「2」 http://localhost:25466/Blog/all/2

動作鏈接。但它仍然被添加。

我的路線配置是

routes.MapRoute(
       "Blog", "Blog/Blog/{tag}/{id}", 
      new { controller = "Blog", action = "Blog", tag = UrlParameter.Optional,id="1" } 
      ); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = "1" }, 
       constraints: new { id = @"\d+" } 
      ); 

而且我的行爲是

public ActionResult All(int id) 
     { 
      var context = new BlogCore.DbContext.BlogContext(); 
      var list = context.Get(id,20); 
      return View(list); 
     } 

     public ActionResult Blog(string tag,int id) 
     { 
      var context = new BlogCore.DbContext.BlogContext(); 
      var list = context.Get(HttpUtility.UrlEncode(tag), id, 20); 
      return View("All", list); 
     } 

這就是我如何使用ActionLink的生成錨鏈接

@Html.ActionLink(blog.PostTitle, "Blog", "Blog", new { tag = blog.PostRewriteName }, null) 

如何避免2在行動鏈接。

在此先感謝。

回答

1

我認爲你必須明確地設置參數,如:

@Html.ActionLink(blog.PostTitle, "Blog", "Blog", new { tag = blog.PostRewriteName, id = 1 }, null) 

,我相信創造與ActionLink的一個鏈接時,實際的觀點字典考慮。

+0

感謝您的回覆。其實我試過,但它不起作用。 – Naresh

+0

Aahhh ....對不起,我用不同的鏈接嘗試此。它正在工作。但是,action鏈接在構造時考慮url參數嗎? – Naresh

+0

我猜不是直接的,而是因爲他們在RouteValueDictionary結束:是 –

1

找到一個途徑生成一個URL時,MVC將使用任何變量從目前的查詢字符串。所以你的變量id將被包含在內。爲了避免這種情況,您需要在傳遞給ActionLink助手的路由數據中明確地將id設置爲null:

@Html.ActionLink(blog.PostTitle, "Blog", "Blog", new { tag = blog.PostRewriteName, id = null }, null)