1

オプションの「id」パラメータを持つページルートがあります。そのように定義されます:

        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

ルートは正常にページに移動しますが、次のエラーが発生します。

タイプ「System.Web.Mvc.UrlParameter」のオブジェクトをタイプ「System.IConvertible」にキャストできません。


ルートデータ値でキーを見つけてからゼロを割り当てるprojectIdことはできないはずですが、そうではありません。「id」ルート値のnullをチェックするさまざまな方法を試し続けていますが、あまり気に入らないようです。

4

1 に答える 1

2

ここでMVCコントローラーアクションとMapRouteを処理していれば、これは完全に機能します。

私があなたの場合に行うことは、UrlParameter.Optionalの代わりにデフォルトであなたのIDのデフォルトを設定することです。



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を読み取ります。


var operation = RouteData.Values["operation"].ToString();
var projectId = int.Parse(RouteData.Values["id"].ToString());
于 2012-05-11T06:25:28.630 に答える