-1

asp.netMVC3アプリケーションで私はこのjqueryajax関数を持っています

function CheckValue() {
    var Returnvalue ="";
    $.ajax({
        type: 'POST',
        url: '@Url.Action("CheckValue", "Home")',
        async: false,
        success: function (Value) {
            Returnvalue= Value;
        },
        complete: function (IsValid) {
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }

    })
    return Returnvalue;
}

それが行うことは、値を返すCheckValue()と呼ばれるHomeControllerからのアクションを呼び出すことです。

ビューページに表示すると、正しく機能しました。しかし、その後、それを.jsファイルに移動し、MyFunctions.jsそのファイルをビューに含めました

<script src="@Url.Content("~/Scripts/MyFunctions.js")" type="text/javascript"></script>

そしてajaxはもう機能しません。「見つかりません」というアラートが表示されます

問題について何か考えはありますか?どうもありがとう

4

2 に答える 2

2

この問題は、コードが.jsファイルに含まれているにもかかわらずC#、具体的にはコードが含まれていることが原因@Url.Action("CheckValue", "Home")です。.jsファイルはコンパイルまたは解釈されないため、エラーが発生します。また、コードの構造が正しくありません。successAJAX呼び出しは非同期であるため、ハンドラーで値を返す必要があります。

修正は、関​​数のパラメーターとしてURLを渡すことです。

function CheckValue(url) {
    var Returnvalue ="";
    $.ajax({
        type: 'POST',
        url: url,
        async: false,
        success: function (Value) {
            return Value;
        },
        complete: function (IsValid) {
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }    
    })
}

次に、ページでC#変数をjavascript関数に渡すことができます。

<script src="@Url.Content("~/Scripts/MyFunctions.js")" type="text/javascript"></script>
<script type="text/javascript">
    CheckValue('@Url.Action("CheckValue", "Home")');
</script>
于 2012-04-27T09:45:11.697 に答える
0

MVCコントローラーのURLを挿入するより良い方法は、サーバー側でレンダリングされた設定JSを使用することです。

@{
    Layout = null;
    Response.Expires = 120;
    Response.CacheControl = "public";
    Response.ContentType = "text/javascript";
}

MyApp = {};
MyApp.settings = {
    checkValueUrl: "@Url.Action("CheckValue", "Home")"
};
于 2012-04-27T12:04:47.077 に答える