2012-05-11 13 views
0

私はしばらくの間ASP.NETをやっていましたが、MVC(一般的に)ではほとんど行いませんでしたが、ASP.NET MVCフレームワークまた、いくつかの点で正しい用語を使用しています。ASP.NET MVCのビューをネスト/ルーティングするための正しい用語と例

これは私の例です(私が実際に使っているアプリケーションは違っていますが、これは公用の例です)。Redmineのより簡単なバージョンを作成したいと思います。

私はexample.org/issuesに行くとすべてのプロジェクトですべての問題のリスト(http://www.redmine.org/issuesに似ています)が表示されるように、問題をリストしたいと思います。

しかし、私がexample.org/project/issuesのようにプロジェクトに行くと、そのプロジェクトの問題が表示されます(http://www.redmine.org/projects/redmine/issuesに似ています)。これはexample.org/project2/issuesなどでも同じです。

これは正しい用語は何ですか?私は、開発者が2つの場所で 'issue'コードを書き換えず、このコードを再利用したと仮定します。

私はこれについて完全に正しい用語を知らないので、ASP.NET MVCの世界で私が始めることができる良い例を見つけるのは難しいです。だから、これの第二の部分は、私はASP.NET MVCで見ることができる例となるでしょう、そして、私はVisual Studioでこれをどのように見えるでしょうか?

/project /の下には、設定、詳細、ログなどのようにいくつか他のものがあります。どのようにナビゲートするかは同様ですhttp://www.redmine.org/projects/redmine/

最後に、プロジェクトがトップレベルにない場合はどうなりますか?場合と同様に、私のアプリケーションはもっと好きだったでしょうか:

example.org/ 
example.org/projects/ 
example.org/projects/project1 
example.org/projects/project1/issues 
example.org/projects/project2 
example.org/dashboard/ 

答えて

2

ことができる。たとえばルート。

このコントローラーには、ListIssuesという名前のアクションメソッドが1つあります。プロジェクト名という名前のパラメータを受け入れる:ヌル==プロジェクト名かどうかを確認、あなたのListIssuesアクションで

routes.MapRoute(
    "Issues Root", 
    "issues", 
    new { controller = "RedMine", action = "ListIssues" } 
); 

routes.MapRoute(
    "Project Issues", 
    "projects/{projectName}/issues", 
    new { controller = "RedMine", action = "ListIssues" } 
); 

、そうであれば、すべての問題を取得:

public ActionResult ListIssues(string projectName) {} 

は、最後にあなたのglobal.asax.csに2つのルートを作成さもなければ特定のものを得る。最初のルートはnullを渡し、2番目のルートはURLにあるものを渡します。 URLのプロジェクト名が無効な場合は、404をスローすることを忘れないでください。

希望すると便利です。

+0

私はこれを多くクリアして以来、以前のコメントを削除しました。最初に、これらのルートがデフォルトよりも前に必要であることに気付きました。第二に、私は彼らがすべてリードする場所であると仮定して、リストのビューを作った。このコードを再利用できる方法はありますか?プロジェクトページで最後の10の問題を表示しますか? – jmlumpkin

+0

routes.MapRouteを呼び出し、2番目のパラメータが「問題」ですが404が表示された場合は、何か問題があります。おそらく、プロジェクトが変更されてから再構築されていないのでしょうか?間違ったコントローラにルートをマップした場合、何らかの詳細なエラーメッセージが表示されることが予想されますが、404では表示されません。 – Roger

+0

ええ、ルーティングのためです。私のコメントのサブリスト部分を別の質問に移動しようとしています。 – jmlumpkin

0

でも、適切なansはありません。しかし、あなたはちょうどあなたがそれをやっている方法を逆にすることによって簡単にやりたいことができます。..すなわち
代わりissueswww.example.org/project/issueswww.example.org/issues/projectまたはちょうどwww.example.org/issues
は、この方法は、簡単にURL内のissuesコントローラ、すべてを行うことができます行うことのできますすべての問題を一覧表示する必要のあるリソースを特定するための文字列です。それはあなたが(私はRedMineControllerを使用します)欲しいものは何でも呼ばれる一方のコントローラを設定し

"{issues}/{*resource}",new{controller="issues"} 


関連する問題