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)