1

我有一个名为 News as Area 的模块。在 NewsAreaRegistration 我有

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 这样的路线,没有我在 Show 控制器中的操作名称索引。我尝试了这个例子的所有排列,但没有任何效果。这甚至可能吗?

4

3 回答 3

2

好的,所以我尝试了这个......

路由表:(默认前)

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        routes.MapRoute(
            name: "Hidden",
            url: "News/{controller}/{friendlyUrlName}/{idNews}",
            defaults: new {controller = "Home", action = "Index", friendlyUrlName = "", idNews = ""});

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional }
        );

在视图中:

@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

我去的网址:

http://localhost:49840/News/Home/Dude-Check-It-Out/12

我还将我的默认路由更改为其他内容,以确保这没有使用默认路由。让我知道这是否有帮助:)

于 2012-09-25T14:33:04.007 回答
1

你把这条路线放在默认路线之前吗?路线位置很重要,从上到下。

于 2012-09-25T14:27:27.820 回答
0

好的......我设法以某种方式工作。

在我的 NewsAreaRegistration 中,我必须在默认之前移动 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 }
  );
}

这是我现在的 RouteUrl(请注意我必须编写控制器。也不确定为什么:

@Url.RouteUrl(
  "NewsShow", new { controller = "Show", friendlyUrlName = FriendlyURL.URLFriendly(true, Model.News.Data.ElementAt(0).Title), idNews = Model.News.Data.ElementAt(0).IdNews }
);
于 2012-09-25T15:49:56.920 回答