2016-12-09 19 views
0

はどのように私はそれがこのルートの設定が

routes.MapRoute(
      name: "SpaceCleanRoute", 
      url: "Space/{id}", 
      defaults: new { controller = "Space", action = "Index" } 
     ); 
のように見えるように、私は私のspacecontrollerに私のルートを変更し

のAjax .LOAD()の問題を解決するために私のルーティングを修正します

私はクリーンなルートを持っており、ユーザーがスペースを見たい時にURLがこの

www.mysite /スペース/ 12345

のようになりますように私のJSファイルがこのような.LOAD()を呼び出したとき

私が今抱えている問題があり、spaceoverviewは私が

パラメータを言ってエラーを取得する私の行動

$("#partialPageContainer").load('/Space/SpaceOverview', function (response, status, xhr) { 
     alert("Load was performed."); 
    }); 

です辞書には、 'YogaBandy2017.Controllers.SpaceController'の 'System.Web.Mvc.ActionResult Index(Int32)'メソッドのnullable型 'System.Int32'のパラメータ 'id'のnullエントリが含まれています。オプションのパラメータは、参照型、null可能型、またはオプションのパラメータとして宣言する必要があります。 パラメータ名:パラメータ

は、だから私は、私が欲しいものではありませんこれは、このようなURLの後にIDを入れて持っている、または私にはないと思える

どのように私はこの問題を解決するかであることができますこれはルーティングの仕組みですか?今私はちょうど私がより良いを見つけることができるまで、各アクションに接続するために「/スペース/ actionNameの/ 1」を使用しますのために、私は推測する - 私はASP.Net

$("#partialPageContainer").load('/Space/SpaceOverview/1', function (response, status, xhr) { 
     alert("Load was performed."); 
    }); 

UPDATEDとルーティングMVCするちょっと新たなんです溶液。送信したい場合は

+0

まず、正しいルートに当たっていることを確認するために、idとnullを最初に作成しようとしましたか? – Faisal

+0

あなたは何を意味するのか分かりません。あなたは例を挙げることができますか?私がurl '/ space/spaceoverview/{id}'を使用すると、idは任意の数字になります。私がidを使用しない場合、例外がスローされ、アクションは決して入力されません。これはちょうど正しいとは思わないし、それを作る方法があるかどうかを知りたいので、負荷のIDに入力する必要はありませんか? – user1186050

+0

''/Space/SpaceOverview'は、(あなたのルートによって定義された) 'SpaceController'の' Index() 'メソッドを呼び出し、' SpaceOverview 'という文字列を 'int id'パラメータに渡すことを意味します'id'は' null'なので例外です。 'SpaceOverview()'メソッドを使いたい場合は、そのルート定義を削除するか、 'SpaceCleanRoute'ルートの前にメソッドごとに特定のルートを作成するか、または制約を追加して2番目のセグメントが' int' –

答えて

2

routes.MapRoute(
    name: "SpaceCleanRoute", 
    url: "Space/{id}", 
    defaults: new { controller = "Space", action = "Index" } 
    constraints: new { id = @"\d+" } 
); 

次に、あなたがあなたのデフォルトルートはその制約と一致しないものを処理するように設定しておく必要があります。

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

最初のルートは/あなたの

/スペースをキャッチします12345

例:12345がと一致するためSpaceOverviewがないのでパターンは、しかし、第2の経路は、例えば、あなたの

/スペース/ SpaceOverview

を処理します。https://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/creating-a-route-constraint-cs

編集:

あなたはより多くの情報と、ここで、経路の制約の例を見つけることができ、私はあなたが技術的にも価値が@"\d+"に一致する可能性があるため、より良い仕事かもしれない(ルーティング制約に建てられたのいずれかを使用することができると信じてパターンは有効なintではありません)。

routes.MapRoute(
    name: "SpaceCleanRoute", 
    url: "Space/{id}", 
    defaults: new { controller = "Space", action = "Index" } 
    constraints: new { id = new System.Web.Http.Routing.Constraints.IntRouteConstraint()} 
); 
0

actionパラメータはこれを試してください:あなたはidパラメータの文字列値をフィルタリングするためのパラメータの制約を使用することができます

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
関連する問題