如何在 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');
}
});
使用以下脚本,我试图访问使用 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');
}
});