Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在url中隐藏操作(MVC4Web应用程序)_Asp.net Mvc 3_Asp.net Mvc 4 - Fatal编程技术网

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 }
);