2012-05-10 7 views
1

オプションの「id」パラメータを持つページルートがあります。そのように定義:RouteDataのオプションパラメータを確認できないようです

 routes.MapPageRoute(null, 
      "projects/{operation}/{id}", 
      "~/Projects/ProjectWizard.aspx", 
      true, 
      new RouteValueDictionary(new 
      { 
       operation = "new", 
       id = UrlParameter.Optional 
      }), 
      new RouteValueDictionary(new 
      { 
       operation = @"new|edit", 
       id = @"\d*" 
      }) 
     ); 

ルートが正常に動作しますが、私はページを取得するとき、私は整数に変換しようとしたときに私のコードが失敗し、その後、オプションの「ID」パラメータは含まれていない場合。

 var operation = RouteData.Values["operation"].ToString(); 
     var projectId = RouteData.Values.ContainsKey("id") ? Convert.ToInt32(RouteData.Values["id"]) : 0; 

これは、限り、私はこのようなルートでIDを渡すよう素晴らしい作品:

http://webapp/projects/edit/123 

projectIdは、それがあるべきと同じように123に等しいです。しかし、私はID含まれていない場合:

http://webapp/projects/new 

ルートはページの罰金に行くのが、私はこのエラーを取得:

Unable to cast object of type 'System.Web.Mvc.UrlParameter' to type 'System.IConvertible'.


中に鍵を見つけることができなければなりませんデータ値をルーティングしてからprojectIdにゼロを割り当てますが、そうではありません。私は "id"ルート値のnullをチェックするさまざまな方法を試し続けますが、それはあまり好きではないようです。どんな助けでも大歓迎です。

答えて

2

ここでMVCコントローラのアクションとMapRouteを扱っていれば完璧に動作します。私はあなたの場合にはどうなるのか

は単にので、代わりにUrlParameter.Optionalのデフォルト設定であなたのIDのデフォルトを設定されています。


var operation = RouteData.Values["operation"].ToString(); 
var projectId = int.Parse(RouteData.Values["id"].ToString()); 



routes.MapPageRoute(null, 
    "projects/{operation}/{id}", 
    "~/Projects/ProjectWizard.aspx", 
    true, 
    new RouteValueDictionary(new 
    { 
     operation = "new", 
     id = "0" 
    }), 
    new RouteValueDictionary(new 
    { 
     operation = @"new|edit", 
     id = @"\d*" 
    }) 
); 

、単にそのようなあなたのIDを読みます

関連する問題