2012-01-06 14 views
0

私は次のように設定してエリアを使用したい:私が望む何ASP.NET MVC3のエリアで簡単なルートを設定するにはどうすればよいですか?

public class ContentAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "Content"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Content_default", 
       "Content/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 

は私のコンテンツ領域内のコントローラに向けられるために、以下のURLを入力する人のためです。

私は6つの文字に続く "/コンテンツ/" で任意のURLを入力する人はに送信されたいwww.stackoverflow.com/Content/0B020D/test-data

- Page action in a controller named ItemController 
- Six characters passed as the parameter id 
- Optional text after that (test-data in this case) to be put into parameter title 

どうすればいいですか?私は、地域を使うときにルートを設定することにはあまり慣れていません。あなたは

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Content_default", 
     "Content/{id}/{optional}", 
     new { controller = "ItemController", action = "TheActionYouWantThisToAllRouteTo" } 
} 

ような何かを探しているので、ID

答えて

2

という変数に入れるべき

6桁はこれは、あなたが指定する必要があり、一方のコントローラとアクションメソッド(にすべてをデフォルトのだろうあなたのインスタンスで)。あなたはそのようにのようなデータを取得することができます。

public ActionResult TheActionYouWantThisToAllRouteTo (string id, string optional) 
{ 
    // Do what you need to do 
} 

ルートが設定されているように、あなたは{ }中括弧のペアでそれをラップすることにより、あなたはURLに含めるの情報に名前を付けることができます。 optionalの名前がisTestDataである場合は、ルートを"Content/{id}/{isTestData}"に変更するだけです。

注:デフォルトのアクション方法を指定していないので、これをTheActionYouWantThisToAllRouteToに置き換えました。この文字列を変更して、これをすべて実行するアクションメソッドを読み込みます。これは、ContentControllerという名前の "普通の"コントローラを持つこともできないことを意味します。

編集

スティーブンヴァルターは、カスタムルート制約の良いブログの記事があります。 It can be found here。あなたが必要とするものを手に入れるのは良いスタートになるはずです。

+0

お返事ありがとうございます。しかし、/ Content/test/abcのようなものではなく、 "/ Content /"の後にユーザーが実際にちょうど6文字を入力したことをどうすれば確認できますか? –

+0

@ Melissa問題はありません、更新を参照してください。 –

関連する問題