0

機能している Ajax.RouteLink があります。フラグメントを追加したいと思います。正しい構文がわかりません。

フラグメントなしの作業ルート:

return Ajax.RouteLink(
            linkText,
            routeName,
            new { caseNo = caseNo, controller = controllerName, option = contentOption },
            new AjaxOptions() { UpdateTargetId = "caseContent", HttpMethod = "Post", OnBegin = onBegin, OnSuccess = onSuccess },
            new { Class = cssClass + (contentOption != null && contentOption == contentView ? " active" : "") });

コンパイラ エラー RouteLink のフラグメント:

return Ajax.RouteLink(
            linkText: linkText,
            routeName: routeName,
            protocol: null,
            hostName: null,
            fragment: fragment,
            routeValues: new { caseNo = caseNo, controller = controllerName, option = contentOption },
            ajaxOptions: new AjaxOptions() { UpdateTargetId = "caseContent", HttpMethod = "Post", OnBegin = onBegin, OnSuccess = onSuccess },
            htmlAttributes: new { Class = cssClass + (contentOption != null && contentOption == contentView ? " active" : "") }
            );

routeValues と htmlAttributes のエラー。匿名型から変換できません。

私は試した:

routeValues: new System.Web.Routing.RouteValueDictionary() { caseNo = caseNo, controller = controllerName, option = contentOption }

しかし、その後、コンパイラーはルーティングパラメーター (caseNo、コントローラー、オプション) について不平を言います。

また、プロトコルとホスト名を変更しないので、null のままにしても問題ありませんか?

4

1 に答える 1

1

私が見る唯一の問題は、投稿されClassた両方の呼び出しで htmlAttributes を使用しているAjax.RouteLinkことです。Classは予約語なので使えません。回避策は、接頭辞@、つまり@class.

申し訳ありませんが、あなたはそれについて正しいです。構文の強調表示にだまされたと思います。とにかく、もう一度見てみると、私はあなたの問題を見つけました。私はAjax.*ヘルパーを個人的に使用していないので、その署名については詳しくありません。そこで、拡張メソッドに関する MSDN ドキュメントを調べました。単純に、 afragment および無名オブジェクトをrouteValuesandに渡すことを許可するオーバーロードはありませんhtmlAttributesfragmentバージョンを使用する場合は、RouteValueDictionaryIDictionary<string, object>forrouteValueshtmlAttributesそれぞれ渡す必要があります。

あなたが抱えている問題RouteValueDictionaryは、実際には辞書のメンバーで初期化する必要があるということ{ "caseNo", caseNo }ですcaseNo = caseNo.

于 2014-08-28T14:18:00.810 に答える