1

コントローラーメソッドに到達できません。URL かもしれないと思いますが、さまざまなバリエーションを試してみました。私はあまりにも長い間これを理解しようとしてきました。

$.ajax({
                    url: '@Url.Action("ajaxCall", "ContactForm")',                          
                    type: "POST",
                    cache: false,
                    dataType: 'json',                       
                    contentType: 'application/json; charset=utf-8',
                    data: JSON.stringify("test"),           
                    success: function () {
                        alert("success");
                    },
                    error: function () {
                        alert("fail");
                    }

                })

これが私のコントローラーです。

    namespace form.Controllers
    {
        public class ContactFormController : Controller
        {


            [HttpPost]
            public ActionResult ajaxCall(string s)
            {            
                return Content("");
            }
    }
}

何が間違っているのですか?

4

5 に答える 5

2

あなたが提供した例には2つの問題があります。

  1. '/ContactForm/ajaxCall'URL.Action メソッドは、完全修飾 URL が必要な場合にのみ返されます ( )'http://servername.com/ContactForm/ajaxCall'

  2. クライアントの JavaScript は、サーバーが JSON を返すことを期待しており、コントローラー アクションは HTML を返します。「JsonResult」を返すようにコントローラーのアクションを変更すると、正常に動作するはずです。テストしました。

于 2013-07-11T01:22:00.393 に答える
0

への呼び出しで「Controller」という単語を指定しないでください@Url.Action()

@Url.Action("ajaxCall", "ContactForm")

クラス名を探しているのではなく、コントローラー名を探しています。ASP.NET MVC 規則では、"Controller" という単語はクラス名の一部であり、この場合は "ContactForm" という名前のコントローラーであることを示します。

于 2013-07-10T20:39:12.937 に答える
0

David の回答でうまくいかない場合 (レンダリングされたページを見て、出力内容を確認してください)、Razor コードを中かっこで囲んでみてください。

@{Url.Action("ajaxCall", "ContactForm")}
于 2013-07-10T20:41:24.570 に答える
0

やってみました:

url: '@Url.Action("ajaxCall", "ContactForm")

コントローラー クラスの完全な名前を指定するべきではありません。ルート名を試すこともできます。

于 2013-07-10T20:43:43.913 に答える