2009-07-31 14 views
2

ダイナミックデータサイトをASP.NET MVCプロジェクトで実行するには、正しいGlobal.asax設定が必要です。ルーティングは現在私の問題であるようです。ここでダイナミックデータWebフォームページでASP.NET MVCアプリケーションルーティングが機能しない

は私のGlobal.asaxです:私が使用しようとしている

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

    MetaModel model = new MetaModel(); 
    model.RegisterContext(typeof(Models.DBDataContext), new ContextConfiguration() { ScaffoldAllTables = true }); 
    routes.Add(new DynamicDataRoute("DD/{table}/{action}.aspx") { 
     Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), 
     Model = model 
    }); 

    routes.MapRoute(
     "Assignment", 
     "Assignment/{action}/{page}", 
     new { controller = "Assignment", action = "Index", page = "" }); 

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

} 

リンクは次のとおりです。

http://localhost:64205/DD/Work_Phases/ListDetails.aspx

私は取得しています次のメッセージ:

'/'アプリケーションでサーバーエラーが発生しました。 リソースが見つかりません。説明: HTTP 404です。 (またはその依存関係の1つ)が であり、その名前が に変更されたか、または一時的に が使用できなくなった可能性があります。 URLに続く を確認して、それが正しく であることを確認してください。

要求されたURL:/DD/Work_Phases/ListDetails.aspx

私はアプリの内部にフォルダがDynamicDataであり、それはまったく同じ結果をもたらしたので、DynamicDataとDDを交換しようとしました。

+0

どのルートにマッチさせようとしていますか? –

+0

@Adrian:DD/Work_Phase/ListDetails.aspxにアクセスしようとしていますが、ページが表示されません。 – RSolberg

答えて

3

URL

http://localhost:64205/DD/Work_Phases/ListDetails.aspx 

は、 "DD" と呼ばれるコントローラをヒットしようとしている2番目の(デフォルト)ルートを、一致しています。私は想像することはできませんが、ページ・パラメータを渡す必要があるだろう、なぜ...

routes.MapRoute(
    "DD", 
    "DD/{action}/{page}", 
    new { controller = "NameOfController", action = "Index", page = "" } 
); 

あなたはこのようになります別のルートエントリが必要な場合があります。ヒットしたページビューは、コントローラーメソッドの戻りアクションによって異なります。 ASP.NET MVCで動的データを統合することで、よりよい一見のため


、彼はMVCの一部ではないの.aspxファイルの取り扱いに関するいくつかの詳細を持っているScott Hanselman's Plugin-Hybrids article.を見ています。特に、ASPによって処理されたくない.ASPXがある場合。NET MVCコントローラは、あなたは無視するルートをインストールすることができます。

routes.IgnoreRoute("{myWebForms}.aspx/{*pathInfo}"); 

ASP.NET MVCはスコットのIgnoreRoute技術が、物理的にディスク上に存在するファイルのURL要求を無視するボックスの外に設定されていることに留意すべきです明らかにより効率的です。

+0

追加されたルート、no luck – RSolberg

+0

新しいルートと一致するはずです。 DDはURLの最初の部分と一致し、Work_Phasesはコントローラ内のメソッド名にマップされ、NameOfControllerはコントローラの名前でなければなりません。 –

0

ASP.NET MVCが動作するためには、アクセスしようとしているURLとルートリストを一致させる必要があります。あなたの現在のglobal.asaxのために

、有効なURLの例は以下のとおりです。

http://domain/AnyController/AnyAction/AnyParameter 
http://domain/Assignment/ 
http://domain/Assignment/AnyAction/AnyParameter 

MVC要求が渡されたようなパラメータで、アクションメソッド、適切なコントローラクラスにリダイレクトされているMVC要求ががリダイレクトされていません。どんなASPXクラスにも。これは、ASP.NET MVCとバニラASP.NETページの違いです。

3

あなたが入力した制約に適合しないため、URLは動的データルートと一致しません。あなたは、アクションListDetailsを要求しているだけで、これらのアクションは

Constraints = new RouteValueDictionary(
        new { action = "List|Details|Edit|Insert" } 

EDITを許可されている:あなたはアクションがListDetailsが存在すると呼ばれることを確信していますか?そして、ちょうどそれを無視するルートを引き起こしている制約だことを確認するために

Constraints = new RouteValueDictionary(
        new { action = "ListDetails|List|Details|Edit|Insert" } 

に上記の制約を変更するには、デフォルトのアクションのいずれかを試すことができますか?例えば。

http://localhost:64205/DD/Work_Phases/List.aspx

関連する問題