-1

最近、 TitleContentを含む content テーブルに基づいてページを作成する方法について質問しました。与えられた回答で、理解できるように、手順に従いました。

次のようなルートを作成しました。

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "ContentManagement",
            "{title}",
            new { controller = "ContentManagement", action = "Index", title = "{title}" }
        );

    }

このようなルートができると思いますか?複数のルートを設定できる場所 また、私が行ったように、タイトルをコントローラーアクションに渡すことができると仮定していますか?

次に、モデルを作成しました。

namespace LocApp.Models
{
    public class ContentManagement
    {
        public int id { get; set; }
        [Required]
        public string title { get; set; }
        public string content { get; set; }
    }
}

そこから、次のようなインデックス アクションを持つコントローラーを作成しました。

    public ViewResult Index(string title)
    {
        using (var db = new LocAppContext())
        {
            var content = (from c in db.Contents
                           where c.title == title
                           select c).ToList();

            return View(content);

        }
    }

それで、 「bla」というタイトルのコンテンツを作成したので、site.com/bla にアクセスすると、「bla/」が見つからないというエラーが表示されます。

誰かが私が間違っていることを教えてもらえますか? また、上部にタブがあるasp.net mvcプロジェクトのデフォルトのレイアウトに精通している場合は、データベースのタイトルに基づいて、ページにつながる一連のタブを作成します

4

1 に答える 1

1

主な問題は、タイトルを使用しているときに、ルーティング エンジンがそれを最初のルートと照合し、そのタイトルでコントローラーを見つけようとすることです。似たようなものを実装したところ、デフォルト ルートに対して有効なコントローラを明示的に定義することで、リクエストが適切に処理されることがわかりました。以下に、デフォルト ルート (ホーム、ヘルプ、エラー) に適合させることを許可するコントローラーの例を示しました。

また、ルート レベルのコントローラーと同じTITLEをコンテンツに付けないようにすることもできます。

    public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new {controller = "Home", action = "Index", id = UrlParameter.Optional},
                new {controller = "Home|Error|Help"},
                new[] {"UI_WWW.Controllers"});

            routes.MapRoute(
                "ContentManagement",
                "{title}",
                new {controller = "ContentManagement", action = "Index"});    

            }
}
于 2013-04-25T16:26:44.130 に答える