我正在研究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。
提前致谢。
答案 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)