2

ASP.NET MVC サイトの JavaScript で URL をジャンプする必要がある状況があります。

ご存知のように、xx.cshtml で @Url.RouteUrl("RouteName", new { params}) を使用して URL を生成できます。今、JavaScriptで同じ方法でURLを生成したいのですが、可能ですか?

私が試してみました:

window.location.href ='@Url.RouteUrl("RouteName", new {param1="' + param+ '"}) %>'.

しかし、うまくいきません。

私のルート:

routes.MapRoute(
            "ListOfTicketAB",
            "piao/{citystart}-{cityend}",
            new { controller = "Tickets", action = "ListS2S", traintype = 0, sorttype = 0, page = 1 },
            new { citystart = "[a-zA-Z0-9]+", cityend = "[a-zA-Z0-9]+" });

私のjs:

var selectS;var selectE;function SearchClick(obj) {

        location.href = '@Url.RouteUrl("ListOfTicketAB",new {citystart="' + selectS+ '",cityend="' + selectE+ '"})';

}

selectS と selectE は、他のいくつかの関数で設定されます。

上記で、エラーが発生しました:

「/」アプリケーションでサーバー エラーが発生しました。

パスに不正な文字があります。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.ArgumentException: パスに無効な文字があります。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

4

1 に答える 1

1

今、JavaScriptで同じ方法でURLを生成したいのですが、可能ですか?

いいえ、JavaScript ファイルはサーバー側の Razor 言語を実行できません。

あなたができることは、この URL をビュー内のグローバル javascript 変数として生成するか、または JavaScript ファイルで後でアクセスできる既存の DOM 要素への HTML5 data-* 属性として生成することです。

<script type="text/javascript">
    var myUrl = '@Url.RouteUrl("ListOfTicketAB", new { citystart = "_start_", cityend = "_end_" })';
</script>

次に、JavaScript で 2 つのプレースホルダーを既存の JavaScript 変数の対応する値に置き換えselectSますselectE

var selectS;
var selectE;

function SearchClick(obj) {
    var url = myUrl.replace('_start_', selectS).replace('_end_', selectE);
    window.location.href = url;
}
于 2013-10-29T12:07:40.013 に答える