web-dev-qa-db-ja.com

aspmvcでコントローラーからAjaxデータ値を受信する方法

次のスクリプトを使用して、ajax関数のデータを使用して送信されている変数にアクセスしようとしていますが、アクセスできませんでした。

<script>
$('#inline-username').click(function () {
    var comments = $('#inline-username').val();
    //var selectedId = $('#hdnSelectedId').val();

    $.ajax({
        url: '@Url.Action("UpdateOrder")', // to get the right path to controller from TableRoutes of Asp.Net MVC
        dataType: "json", //to work with json format
        type: "POST", //to do a post request
        contentType: 'application/json; charset=utf-8', //define a contentType of your request
        cache: false, //avoid caching results
        data: { test: $(this).text() }, // here you can pass arguments to your request if you need
        success: function (data) {
            // data is your result from controller
            if (data.success) {
                alert(data.message);
            }
        },
        error: function (xhr) {
            alert('error');
        }
    });
});

これがコントローラーのアクションです

public ActionResult UpdateOrder()
    {
        // some code
        var test = Request.Form["test"];
        return Json(new { success = true, message = "Order updated successfully" }, JsonRequestBehavior.AllowGet);
    }

私は試した Request.Form["test"]しかし、その値はnullです。 dataのオブジェクトをどのように受け取る必要がありますか?

3

ActionResultはGETであり、ActionResultの入力パラメーターがないため、これらを変更するか、以下を参照してください。

<script>
$('#inline-username').click(function () {
    var comments = $('#inline-username').val();
    //var selectedId = $('#hdnSelectedId').val();

    $.ajax({
        url: /ControllerName/ActionName
        dataType: "json",
        type: "GET", 
        contentType: 'application/json; charset=utf-8', //define a contentType of your request
        cache: false, 
        data: { test: comments  },
        success: function (data) {
            // data is your result from controller
            if (data.success) {
                alert(data.message);
            }
        },
        error: function (xhr) {
            alert('error');
        }
    });
});

次に、コントローラー内で:

public ActionResult UpdateOrder(string test)
    {
        // some code
        return Json(new { success = true, message = "Order updated successfully" }, JsonRequestBehavior.AllowGet);
    }

更新

POSTを使用する場合は、呼び出すアクションは次のように[HttpPost]である必要があることに注意してください。

[HttpPost]
public ActionResult Example()

ActionResultの上にHTTPがない場合、デフォルトではGet

7
Valkyrie

アクションメソッドに[HttpPost]属性のマークを付けましたか。 ?

0
Abi

この投稿は私を大いに助けてくれました。 GETを実行しましたが、POST [HttpPost]だけで内部サーバーエラーが発生します:

[HttpPost]
public ActionResult SaveOrder(int id, string test, string test2)

そのため、JSON.stringifyを使用してparamsデータを設定する必要があり、それが機能しました。 POSTに対する私の完全なajaxリクエスト:

$.ajax({
    url: "/Home/SaveOrder",
    dataType: "json",
    type: "POST", 
    contentType: 'application/json; charset=utf-8', //define a contentType of your request
    cache: false, 
    data: JSON.stringify({ id:2, test: "test3", test2: "msj3" }),
    success: function (data) {
        // data is your result from controller
        if (data.success) {
            alert(data.message);
        }
    },
    error: function (xhr) {
        alert('error');
    }
});
0
Tomás Vélez

Actionメソッドは[HttpPost]属性で装飾する必要があります。デバッガーを使用して、実際にそのメソッドを呼び出していることを確認しましたか?

いつでもC#でビューモデルを定義し、それをpostメソッドのパラメーターとして受け入れることができます-値の名前がモデルと同じである限り、Asp.MVCはpostデータを解析します。

0
thisextendsthat