web-dev-qa-db-ja.com

asp.net mvcでコントローラーへの単純なAjax呼び出しを行う

私はASP.NET MVC Ajax呼び出しを始めようとしています。

コントローラー:

public class AjaxTestController : Controller
{
    //
    // GET: /AjaxTest/
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult FirstAjax()
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   
}

表示:

<head runat="server">
    <title>FirstAjax</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var serviceURL = '/AjaxTest/FirstAjax';

            $.ajax({
                type: "POST",
                url: serviceURL,
                data: param = "",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: successFunc,
                error: errorFunc
            });

            function successFunc(data, status) {     
                alert(data);
            }

            function errorFunc() {
                alert('error');
            }
        });
    </script>
</head>

コントローラメソッドがデータを返すようにアラートを印刷するだけです。上記のコードは、私の考えでは「chamara」と表示するだけです。アラートは発生していません。

UPDATE

私は以下のように私のコントローラを修正しました、そしてそれは働き始めます。なぜそれが今うまくいっているのか、私には明確な考えがありません。何人か説明してください。私は同じメソッド名とパラメータを持つ2つのメソッドを追加することはできませんので、私はこれを追加しました関連していません。

public class AjaxTestController : Controller
    {
        //
        // GET: /AjaxTest/
        [HttpGet]
        public ActionResult FirstAjax()
        {
            return View();
        }

        [HttpPost]
        public ActionResult FirstAjax(string a)
        {
            return Json("chamara", JsonRequestBehavior.AllowGet);
        }
    }
99
chamara

更新が終わったら、

  1. 最初にデフォルトのHttpGetリクエストでFirstAjaxアクションを呼び出し、空のHTMLビューをレンダリングします。 (以前は持っていなかった)
  2. 後でそのビューのDOM要素をロードすると、Ajax呼び出しが起動してアラートを表示します。

以前はHTMLをレンダリングせずにJSONをブラウザに戻すだけでした。これで、JSONデータを取得できる場所にHTMLビューがレンダリングされました。

JSONのHTMLではなくプレーンデータを直接レンダリングすることはできません。

22
asb

POSTINGはサーバーに何もしていないのでdata属性を削除してください(あなたのコントローラーはパラメーターを期待していません)。

そしてAJAXメソッドでは、静的文字列ではなくRazorを使用して@Url.Actionを使用できます。

$.ajax({
    url: '@Url.Action("FirstAjax", "AjaxTest")',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: successFunc,
    error: errorFunc
});

あなたのアップデートから:

$.ajax({
    type: "POST",
    url: '@Url.Action("FirstAjax", "AjaxTest")',
    contentType: "application/json; charset=utf-8",
    data: { a: "testing" },
    dataType: "json",
    success: function() { alert('Success'); },
    error: errorFunc
});
49
Darren

Razorを使って、次のようなアクションを呼び出してURLを動的に変更します。

$.ajax({
    type: "POST",
    url: '@Url.Action("ActionName", "ControllerName")',
    contentType: "application/json; charset=utf-8",
    data: { data: "yourdata" },
    dataType: "json",
    success: function(recData) { alert('Success'); },
    error: function() { alert('A error'); }
});
11
gdmanandamohon

あなたのUPDATEに関する質問です。

同じ名前とシグネチャを持つ2つのメソッドを持つことはできないので、ActionName属性を使用する必要があります。

更新:

[HttpGet]
public ActionResult FirstAjax()
{
    Some Code--Some Code---Some Code
    return View();
}

[HttpPost]
[ActionName("FirstAjax")]
public ActionResult FirstAjaxPost()
{
    Some Code--Some Code---Some Code
    return View();
}

そして、メソッドがどのようにアクションになるかについてのさらなる参照については this linkを参照してください。しかし非常に良い参考資料。

4
RGR

1つのページに2つの異なるバージョンのjqueryライブラリを用意する必要はありません。ajax呼び出しを機能させるには、 "1.9.1"または "2.0.0"で十分です。

これがあなたのコントローラコードです:

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult FirstAjax(string a)
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   

これはあなたの見解がどのように見えるべきかである:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function () {
    var a = "Test";
    $.ajax({
        url: "../../Home/FirstAjax",
        type: "GET",
        data: { a : a },
        success: function (response) {
            alert(response);
        },
        error: function (response) {
            alert(response);
        }
    });
});
</script>
4
Lokesh_Ram

Ajax CallでC#Methodを押す必要がある場合は、リクエストが取得された場合に2つの案件タイプとURLを渡すだけで、URLを指定するだけで済みます。下記のコードに従ってください。

C#コード:

    [HttpGet]
    public ActionResult FirstAjax()
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   

リクエストを取得する場合のJavaスクリプトコード

    $.ajax({
        url: 'home/FirstAjax',
        success: function(responce){ alert(responce.data)},
        error: function(responce){ alert(responce.data)}
    });

ポストリクエストと[HttpGet]を[HttpPost]にした場合のJavaスクリプトコード

        $.ajax({
            url: 'home/FirstAjax',
            type:'POST',
            success: function(responce){ alert(responce)},
            error: function(responce){ alert(responce)}
        });

注:あなたのView Controllerと同じコントローラにFirstAjaxを使用している場合は、URLにController名は必要ありません。 url: 'FirstAjax',のように

2
Hafiz Asad

見る

 $.ajax({
        type: 'GET',
        cache: false,
        url: '/Login/Method',
        dataType: 'json',
        data: {  },
        error: function () {
        },
        success: function (result) {
            alert("success")
        }
    });

コントローラメソッド

 public JsonResult Method()
 {
   return Json(new JsonResult()
      {
         Data = "Result"
      }, JsonRequestBehavior.AllowGet);
 }
1
oyenigun

Global.asaxに "JsonValueProviderFactory"を追加します。

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
0
Yashh

url: serviceURL,の代わりに使う

url: '<%= serviceURL%>',

そして、あなたはsuccessFuncに2つのパラメータを渡していますか?

function successFunc(data)
 {
   alert(data);
 }
0
swapneel