Asp.net mvc 3 在url中隐藏操作(MVC4Web应用程序)
我有一个叫做新闻区域的模块。在新闻领域,我有Asp.net mvc 3 在url中隐藏操作(MVC4Web应用程序),asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc 3,Asp.net Mvc 4,我有一个叫做新闻区域的模块。在新闻领域,我有 context.MapRoute( "NewsShow", "News/{controller}/{friendlyUrlName}/{idNews}", new { controller = "Show", action = "Index", friendlyUrlName = "", idNews = "" } ); 在我的视图(在主视图文件夹中)中,我使用
context.MapRoute(
"NewsShow",
"News/{controller}/{friendlyUrlName}/{idNews}",
new { controller = "Show", action = "Index", friendlyUrlName = "", idNews = "" }
);
在我的视图(在主视图文件夹中)中,我使用RouteUrl方法强制执行自定义路由
@Url.RouteUrl("NewsShow", new { controller = "Show", action = "Index", friendlyUrlName = FriendlyURL.URLFriendly(true, Model.News.Data.ElementAt(0).Title), idNews = Model.News.Data.ElementAt(0).IdNews})"
我想做的是有一条这样的路线www.something.com/News/Show/bla-bla-bla/9
没有显示控制器中的操作名称索引。我尝试了这个例子的所有文字排列,但没有任何效果。这可能吗?您是否将此路由置于默认路由之前?路线位置很重要,从上到下。好的,所以我试了一下 路由表:(默认之前) 他认为:
@Url.RouteUrl("Hidden", new { friendlyUrlName = "Dude-Check-It-Out", idNews = 12 })
在我的控制器中:
public ActionResult Index(string friendlyUrlName, int idNews)
{
ViewBag.Message = "Modify this template to kick-start your ASP.NET MVC application.";
ViewBag.UrlName = friendlyUrlName;
ViewBag.NewsId = idNews;
return View();
}
我得到了这个
/News/Home/Dude-Check-It-Out/12
我要访问的URL:
http://localhost:49840/News/Home/Dude-Check-It-Out/12
我还将默认路线更改为其他路线,以确保这不是使用默认路线。让我知道这是否有用:)好的……我设法工作了 在我的NewsArea注册中,我必须在默认情况下移动NewsShow路线。不知道为什么,因为RouteUrl应该精确地映射到NewsShow
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"NewsShow",
"News/{controller}/{friendlyUrlName}/{idNews}",
new { controller = "Show", action = "Index", friendlyUrlName = "", idNews = "" }
);
context.MapRoute(
"News_default",
"News/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
这是我现在的路线(请注意,我必须编写控制器。不确定确切原因:
@Url.RouteUrl(
"NewsShow", new { controller = "Show", friendlyUrlName = FriendlyURL.URLFriendly(true, Model.News.Data.ElementAt(0).Title), idNews = Model.News.Data.ElementAt(0).IdNews }
);
只是想知道你为什么不使用@Html.ActionLink?因为我想强制执行mapI尝试的路由。我只指定了控制器,只指定了操作,没有任何操作,什么都不起作用…就像我在网上看到的那样很奇怪,类似的问题和人们取得了很大的成功。哦…看看那个…我尝试了数据链接=“@Url.action”(“Index”,“Show”,new{area=”新闻”,friendlyUrlName=FriendlyURL.URLFriendly(true,Model.News.Data.ElementAt(0.Title),idNews=Model.News.Data.ElementAt(0.idNews})”它工作得很好。问题是现在的url看起来像是SEO友好的。是的,它非常适合生成SEO友好的链接…也可以检查@Html.RouteLink。我在需要SEO链接时也使用它。我使用RouteUrl来避免这种情况problem@TheMentor
RouteUrl
用于url生成,在客户端它将是简单的链接是的,我想要t帽子。我想要像www.something.com/News/Show/bla-bla-bla/9这样的链接,我想要隐藏动作方法。这在www.something.com/News/Show/Index/bla-bla-bla/9中有效……这不是www.something.com/News/Show/bla-bla-bla-bla/9@TheMentor我明白你的意思,我甚至认为www.something.com/News/Show/bla-bla-bla/9
是用“Ro”生成的uteUrl',如果你的路线在最后,它不会工作。但是如果你在索引操作中设置断点…当你单击url时它会进入内部吗?是的。我甚至在页面上显示了值。更新了我的答案,向你展示了我示例周围的所有代码。scrum会议时间将在几分钟后回来,看看你是否找到了它。嗯…我的答案和webdevelop从你所说的内容来看,ers的答案都是有效的。如果没有其他的话…webdeveloper应该在你描述他给出的答案时获得好评。尽管我给出了一个完整的例子。只是说…给予信任有助于激励人们提供更多帮助。
@Url.RouteUrl(
"NewsShow", new { controller = "Show", friendlyUrlName = FriendlyURL.URLFriendly(true, Model.News.Data.ElementAt(0).Title), idNews = Model.News.Data.ElementAt(0).IdNews }
);