2012-04-02 3 views
2

私のモジュールである/ OrchardLocal/Module1/Controller1/Action1のようなページを作成しました。 idパラメータが必要です。 idは、次のように渡された場合オーチャード - クエーストリング・パラメーターでページを操作する方法は?

ページでは動作します -/OrchardLocal/Module1を/ Controller1 /アクション1/7

しかし、私は、クエリ文字列にIDを渡した場合、私はエラーを取得する -/OrchardLocal/Module1を/ Controller1 /アクション1 ?ID = 7

「パラメータ辞書がパラメータ非NULL可能タイプの 『ID』のためのヌルエントリが含まれている 『可能System.Int32』」

私は、クエリ文字列を使用する必要はありません。しかし、私はなぜそれが動作していないと私はそれをquerystringで動作させることができます知っていると思います。

おかげ

ここで[EDIT]

は、アクションメソッドです。

public ActionResult Action1(int id) 
    { 
     ... 
    } 

これは私がRoutes.csに持​​っているものです。

new RouteDescriptor { 
    Priority = 6, 
    Route = new Route("Action1/{id}", 
    new RouteValueDictionary{{"area", "Module1"},{"controller","Controller1"},{"action","Action1"}}, 
    new RouteValueDictionary(), 
    new RouteValueDictionary{{"area", "Module1"}}, 
    new MvcRouteHandler()) 
} 
+2

これはオーチャードの質問ではなく、一般的なASP.NET MVCの質問です。ルートとモデルバインディングの詳細を読む必要があります。 –

+1

あなたのコントローラアクションのルートとメソッドシグネチャを貼り付けることはできますか? –

+0

ルートとコントローラのアクションが追加されました。 – user471317

答えて

2

オーチャードではなくルーティングの問題です。

Route = new Route(
    "Action1/{id}", 
    new RouteValueDictionary { 
     {"area", "MyModule"}, 
     {"controller", "Controller1"}, 
     {"action", "Action1"} 
     , { "id", UrlParameter.Optional} 
    }, 
    new RouteValueDictionary(), 
    new RouteValueDictionary {{"area", "MyModule"}}, 
    new MvcRouteHandler() 
) 

注:オプションのようのidのparamを設定する場合は、この作業をする必要があり、優先度6と私はあなたのエラーをREPROすることはできません。オーチャードの旧バージョンを使用している可能性があります。私は1.4です。 Priority = 100では、エラーを再現することができ、上記の変更によって修正されます。