1

NewsasAreaというモジュールがあります。NewsAreaRegistrationで私は持っています

context.MapRoute(
            "NewsShow",
            "News/{controller}/{friendlyUrlName}/{idNews}",
            new { controller = "Show", action = "Index", friendlyUrlName = "", idNews = "" }
        );

私のビュー(メインのViewフォルダー内)では、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

私が行くURL:

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 に答える