为什么我的视图操作链接包括MVC3中的当前操作参数

时间:2012-11-13 01:54:33

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-routing asp.net-mvc-areas

我正在研究MVC3应用程序。

在我看来,我使用@ Html.ActionLink作为锚链接。每件事都很好。 但是这些链接包括链接中当前网址的参数。

如果我当前的链接是http://localhost:25466/Blog/all/2

正在生成的操作链接为http://localhost:25466/Blog/Blog/shoes/2

在上面的链接实际上我没有做任何事情在网址中包含'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。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我认为您必须明确设置该参数,例如:

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

我相信在使用ActionLink创建链接时会考虑实际的视图字典。

答案 1 :(得分:1)

当找到生成网址的路由时,MVC将使用当前查询字符串中的任何变量。因此,您的变量ID将被包含在内。要避免这种情况,您需要在传递给ActionLink助手的routedata中将id显式设置为null:

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