Asp.net mvc ASP.NET MVC路线图
请帮助我更正我的ASP.NET MVC路线图 我有一个带有ActionLink的菜单项:Asp.net mvc ASP.NET MVC路线图,asp.net-mvc,asp.net-mvc-routing,maproute,ignoreroute,Asp.net Mvc,Asp.net Mvc Routing,Maproute,Ignoreroute,请帮助我更正我的ASP.NET MVC路线图 我有一个带有ActionLink的菜单项: @Html.ActionLink(“文章”、“列表”、“文章”) 在主页上,它看起来像: localhost/Article这是可以的 但是在具体的文章页面上,URLlocalhost/Article/List/11my menu链接是相同的: localhost/Article/List/11 但是我需要localhost/Article 我的路线图代码如下: public static void Reg
@Html.ActionLink(“文章”、“列表”、“文章”)
在主页上,它看起来像:
localhost/Article
这是可以的
但是在具体的文章页面上,URLlocalhost/Article/List/11
my menu链接是相同的:
localhost/Article/List/11
但是我需要localhost/Article
我的路线图代码如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Article",
url: "Article/{action}/{id}",
defaults: new { controller = "Article", action = "List", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
以下是控制器代码:
public ActionResult List(int? id)
{
ArticlesDataManager artMgr = new ArticlesDataManager();
ArticleViewModel art = new ArticleViewModel();
art.Articles = artMgr.GetLastArticles();
art.Article = (id == null) ? artMgr.GetLast() : artMgr.GetArticle((int)id);
ViewData.Model = art;
return View();
}
我猜您当前的查询字符串项目正在添加到您的操作链接中。要避免此问题,请使用重载并尝试显式地将null
作为routeValue传递,并查看它带来的更改
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName,
RouteValueDictionary routeValues,
IDictionary<string, Object> htmlAttributes
)
公共静态MvcHtmlString ActionLink(
这个HtmlHelper HtmlHelper,
字符串链接文本,
字符串actionName,
字符串控制器名称,
RouteValueDictionary routeValues,
辞典
)
因此,您的代码可以重新编写为
<li>@Html.ActionLink("Articles", "List", "Article",
new RouteValueDictionary { },null)</li>
@Html.ActionLink(“文章”、“列表”、“文章”,
新RouteValueDictionary{},空)
你也可以试试这个版本
<a href="Url.Action("List", "Articles")">Articles</a>
通过更改路线图解决了我的问题:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "ArticleByFirst",
url: "Article/{action}/",
defaults: new { controller = "Article", action = "List" }
);
routes.MapRoute(
name: "ArticleById",
url: "Article/List/{id}",
defaults: new { controller = "Article", action = "List", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
我的菜单链接看起来像:
我的项目链接是:
这不好,我不能在ActionLink中选择路线图的名称。在这种情况下,菜单的url是/Home/List?Length=7@YuriyMayorov:对不起,超载是错误的。试试更新的。你能分享一个示例项目吗?在skydrive上?您需要url中的id吗?你能把它从地图上去掉吗。您还可以尝试将Shyju指示的RouteValueDictionary设置为new{id=null},而不仅仅是new{}。是的,我的url中需要id。article/list/id-显示文章列表和所选文章。文章/列表-按日期显示文章列表和最后一篇文章。我知道,我可以通过添加像“查看”这样的新操作来解决我的问题。Article/view/id。但我只想使用一个操作:)int是否是控制器操作(即int)中可为null的int?这可能与ActionLink()的新{id=null}结合使用也会产生影响method@dreza是的,我把我的控制器代码加到帖子里了