javascript - AjaxがMVC Controller-Urlに呼び出す問題




jquery asp.net-mvc-3 (4)

以前に投稿されたjQuery / MVCの質問を見てきましたが、実行可能な回答が見つかりませんでした。

私は次のJavaScriptコードを持っています:

$.ajax({
 type: "POST",
 url: '@Url.Action("Search","Controller")',
 data: "{queryString:'" + searchVal + "'}",
 contentType: "application/json; charset=utf-8",
 dataType: "html",
 success: function (data) {
 alert("here" + data.d.toString());
 }
});

URLを呼び出すと、投稿は次のようになります。

NetworkError: 500 Internal Server Error - <a href="http://localhost/Web/Navigation/@Url.Action(%22Search%22,%22Chat%22)"></a> 

誰かが私に説明してください、なぜそれがこのような(それの背後にある論理)のように戻って、私に有効な解決策を提供するのでしょうか? 前もって感謝します!
PS:追加情報:%22は<< >>文字のURLエンコーディング参照です


あなたはコードの例で型エラーがあります。 あなたはsuccess後にcurlybracketを忘れる

$.ajax({
 type: "POST",
 url: '@Url.Action("Search","Controller")',
 data: "{queryString:'" + searchVal + "'}",
 contentType: "application/json; charset=utf-8",
 dataType: "html",
 success: function (data) {
     alert("here" + data.d.toString());
 }
})

;


ビューを表示せずにそれを行うには、次のような方法があります。

$.ajax({
    type: "POST",
    url: '/Controller/Search',
    data: { queryString: searchVal },
    success: function (data) {
      alert("here" + data.d.toString());
    }
});

これはURLにPOSTしようとします:

" http:// domain / Controller / Search (使用するアクションの正しいURL)"


mihai-laboの回答から、requrl変数を完全に宣言してスキップし、URL生成コードを "url:"の直前に置くのはなぜですか?

 $.ajax({
    type: "POST",
    url: '@Url.Action("Action", "Controller", null, Request.Url.Scheme, null)',
    data: "{queryString:'" + searchVal + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "html",
    success: function (data) {
        alert("here" + data.d.toString());
    }
});

これを行うには、JavascriptをRazorビュー内に配置して、

@Url.Action("Action","Controller")

Razorによって解析され、実際の値が置き換えられます。

あなたのビューにあなたのJavascriptを移動したくない場合は、ビュー内で設定オブジェクトを作成し、そのJavascriptファイルから参照することができます。

例えば

var MyAppUrlSettings = {
    MyUsefulUrl : '@Url.Action("Action","Controller")'
}

あなたの.jsファイル

$.ajax({
 type: "POST",
 url: MyAppUrlSettings.MyUsefulUrl,
 data: "{queryString:'" + searchVal + "'}",
 contentType: "application/json; charset=utf-8",
 dataType: "html",
 success: function (data) {
 alert("here" + data.d.toString());
});

代わりに、HtmlHelpers内のフレームワークに組み込まれたAjaxメソッドを利用して、JSコードでビューを「汚染する」ことなく同じことを実現することができます。





asp.net-mvc-3