4

私は(私は愚かなと思う)問題を抱えています。

コントローラー、Indexメソッドがあり、そのビューにはいくつかのJQuery関数があります。

それは正常に機能し、JQueryメソッドは完全に機能します。

私が使用するリンクは

http://localhost:54209/TestInput/

でも入れたら

http://localhost:54209/TestInput/Index

JQuery関数は機能しません。私が知っていることから、彼らはまったく同じように行動するべきです。

私が変えるのはそれだけです

本当にありがとうございました。これは、過去数時間の間、私を夢中にさせてきました!

たとえば、これは私のスクリプトです

<script>
  $(document).ready(function() {
    $('select#testCategoriesUniqueId').change(function() {
        var testCategory = $(this).val();
        $.ajaxSetup({ cache: false });
         alert ("AAA");
        $.ajax({
            url: "TestInput/listTestCases/" + testCategory,
            dataType: "json",
            type: 'post',
            success: function(data) {
                $("#testCasesUniqueId").removeOption(/./);
                for (var i = 0; i < data.length; i++) {
                    var val = data[i].Value;
                    var text = data[i].Text;
                    $("#testCasesUniqueId").addOption(val, text, false);
                }
            }
        });
    });
});

どちらの場合もアラートが表示されますが、2番目のリンクではコントローラーを呼び出すことができません。

コントローラのlistTestCasesメソッドを呼び出しません。

アップデート:

そのため、正確なリンクの代わりにパラメーターを使用しようとしましたが、まだ問題があり、両方のソースを取得し、差分を取得しました。唯一の違いは

<form name="aspnetForm" method="post" action="Index" id="aspnetForm">

対。

<form name="aspnetForm" method="post" action="TestInput" id="aspnetForm">

<form action="/TestInput/Index" method="post">

対。

<form action="/TestInput" method="post">

私が信じていることは、jQueryとは何の関係もありません。

どちらの場合も、まだラートが見えます。ただし、JQueryは〜/ TestInputで機能し、〜/ TestInput/Indexでは機能しません。

4

1 に答える 1

5

これが、asp.netmvcアプリでURLをハードコーディングしてはいけない理由です。問題は、ajaxのURLが相対URLであるということです。URL http://example.com/TestInput/を使用してページをロードすると、ajaxurlはhttp://example.com/TestInput/TestInput/listTestCasesまたはhttp://example.com/TestInput/のようになります。 listTestCases

URL http://example.com/TestInput/Indexを使用すると、ajaxurlは最終的にhttp://example.com/TestInput/Index/TestInput/listTestCasesになります。

Inseteadでは、Htmlヘルパーの1つを使用して、このようにajaxURLを宣言する必要があります。(かみそりの構文を使用)

<script>
  $(document).ready(function() {
    $('select#testCategoriesUniqueId').change(function() {
        var testCategory = $(this).val();
        $.ajaxSetup({ cache: false });
         alert ("AAA");
        $.ajax({
            url: "@Url.Action("listTestCases")"+ "/" + testCategory,
            dataType: "json",
            type: 'post',
            success: function(data) {
                $("#testCasesUniqueId").removeOption(/./);
                for (var i = 0; i < data.length; i++) {
                    var val = data[i].Value;
                    var text = data[i].Text;
                    $("#testCasesUniqueId").addOption(val, text, false);
                }
            }
        });
    });
});
</script>

ASPXビューエンジンの更新:

RazorではなくASPXビューエンジンを使用している場合は、この構文を使用してください。

<script>
  $(document).ready(function() {
    $('select#testCategoriesUniqueId').change(function() {
        var testCategory = $(this).val();
        $.ajaxSetup({ cache: false });
         alert ("AAA");
        $.ajax({
            url: "<%=Url.Action("listTestCases")%>"+ "/" + testCategory,
            dataType: "json",
            type: 'post',
            success: function(data) {
                $("#testCasesUniqueId").removeOption(/./);
                for (var i = 0; i < data.length; i++) {
                    var val = data[i].Value;
                    var text = data[i].Text;
                    $("#testCasesUniqueId").addOption(val, text, false);
                }
            }
        });
    });
});
</script>

必ずFirebugまたはF12開発ツールを使用して、必要な正確なURLを再確認してください。

于 2012-11-17T02:02:40.387 に答える