如何在 asp mvc 中从控制器接收 Ajax 数据值

How to Receive Ajax Data values from Controller in asp mvc

使用以下脚本,我试图访问使用 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"] 但它的值为空。我应该如何接收 data 的对象?

动作方法应该用 [HttpPost] 属性修饰。您是否使用调试器来确保您实际调用了该方法?

您始终可以只在 C# 中定义一个视图模型,然后接受它作为您的 post 方法的参数 - Asp.MVC 将为您解析 post 数据,只要值的名称与您的模型相同。

您的 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

你有没有用 [HttpPost] 属性标记你的操作方法。 ?

这个post对我帮助很大。我执行了 GET,但 POST 仅使用 [HttpPost] 引发了内部服务器错误:

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

所以我不得不用 JSON.stringify 设置参数数据并且它起作用了。我对 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');
    }
});