使用 Ajax 到 POST 到 ASP.Net 控制器 - Post 的数据不正确
Using Ajax to POST to ASP.Net controller - Data for Post incorrect
这是我的 DisputeController
方法存根:
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(DisputeUdpateStatusModel model)
{//some code
这是我的 Ajax 电话:
var url = '/dispute/UpdateDisputeStatus';
var disputeStatusObj = {
DisputeId: id,
DisputeStatusId: selectedValue
}
$.ajax({
url: url,
cache: false,
type: 'POST',
contentType: "application/json; charset=utf-8",
data: disputeStatusObj,
success: function (data) {
alert('Status Changed Successfully');
},
error: function (e) {
alert('Error: ' + e.status);
}
});
我知道路由有效,因为代码不使用数据参数就进入了我的方法(显然参数中没有模型)
我试过以下数据格式:
data: {'DisputeId': DisputeId, 'StatusId': DisputeStatusId},
data: {disputeStatusObj},
data: JSON.Stringify(disputeStatusObj)
使用控制器方法:
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(string disputeId, string statusId)
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(modelname model)
None 其中工作。我收到 Not found 错误或 500 错误。
记住,我知道路由是正确的,当我发送没有数据的请求时,我在这里遗漏了什么?
我是否错误地声明了控制器?
验证您的模型应具有相同的名称和数据类型,因为 post 来自 Jquery 的值未与 属性 的值映射模型.
@Mike 我试过下面的代码
public class DisputeUpdateStatusModel
{
public string DisputeId { get; set; }
public string DisputeStatusId { get; set; }
}
public class DisputeController : Controller
{
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(DisputeUpdateStatusModel model)
{
return new ContentResult() { Content = "OK" };
}
}
脚本被视为:
<script type="text/javascript">
var disputeStatusObj = {}
disputeStatusObj.model = {
DisputeId: 1,
DisputeStatusId: 1
}
var url = '/dispute/UpdateDisputeStatus';
$.ajax({
url: url,
cache: false,
type: 'POST',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(disputeStatusObj),
success: function (data) {
alert('Status Changed Successfully');
},
error: function (e) {
alert('Error: ' + e.status);
}
});
</script>
请看
如果这不起作用,你能显示模型 class 吗?
感谢您的所有意见。我的解决方案是上述答案的组合。
我无法让我的代码绑定到模型,所以我回到了基础。
我按照 Stephen Muecke 的建议取出了 contentType: "application/json; charset=utf-8",
,并放弃了我的控制器中的模型并将其替换为 string disputeId, string statusId
,并且按照 Er Pravin Suthar
的建议确保参数被称为相同的东西。另请注意,data
部分作为 data: { disputeId: disputeId, statusId: statusId }
发送,参数名称周围没有引号。所以我最终得到:
var statusId = statusDropdown.value;
var disputeId = $("#disputeId").val();
$.ajax({
url: "/Dispute/UpdateDisputeStatus",
data: { disputeId: disputeId, statusId: statusId },
type: 'POST',
success: function (data) {
alert('Success');
},
error: function (e) {
alert('Status not changed' + e.responseText + ' : ' + e.status);
}
});
控制器结构为:
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(string disputeId, string statusId)
再次感谢您的所有意见!
这是我的 DisputeController
方法存根:
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(DisputeUdpateStatusModel model)
{//some code
这是我的 Ajax 电话:
var url = '/dispute/UpdateDisputeStatus';
var disputeStatusObj = {
DisputeId: id,
DisputeStatusId: selectedValue
}
$.ajax({
url: url,
cache: false,
type: 'POST',
contentType: "application/json; charset=utf-8",
data: disputeStatusObj,
success: function (data) {
alert('Status Changed Successfully');
},
error: function (e) {
alert('Error: ' + e.status);
}
});
我知道路由有效,因为代码不使用数据参数就进入了我的方法(显然参数中没有模型)
我试过以下数据格式:
data: {'DisputeId': DisputeId, 'StatusId': DisputeStatusId},
data: {disputeStatusObj},
data: JSON.Stringify(disputeStatusObj)
使用控制器方法:
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(string disputeId, string statusId)
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(modelname model)
None 其中工作。我收到 Not found 错误或 500 错误。
记住,我知道路由是正确的,当我发送没有数据的请求时,我在这里遗漏了什么?
我是否错误地声明了控制器?
验证您的模型应具有相同的名称和数据类型,因为 post 来自 Jquery 的值未与 属性 的值映射模型.
@Mike 我试过下面的代码
public class DisputeUpdateStatusModel
{
public string DisputeId { get; set; }
public string DisputeStatusId { get; set; }
}
public class DisputeController : Controller
{
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(DisputeUpdateStatusModel model)
{
return new ContentResult() { Content = "OK" };
}
}
脚本被视为:
<script type="text/javascript">
var disputeStatusObj = {}
disputeStatusObj.model = {
DisputeId: 1,
DisputeStatusId: 1
}
var url = '/dispute/UpdateDisputeStatus';
$.ajax({
url: url,
cache: false,
type: 'POST',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(disputeStatusObj),
success: function (data) {
alert('Status Changed Successfully');
},
error: function (e) {
alert('Error: ' + e.status);
}
});
</script>
请看
如果这不起作用,你能显示模型 class 吗?
感谢您的所有意见。我的解决方案是上述答案的组合。
我无法让我的代码绑定到模型,所以我回到了基础。
我按照 Stephen Muecke 的建议取出了 contentType: "application/json; charset=utf-8",
,并放弃了我的控制器中的模型并将其替换为 string disputeId, string statusId
,并且按照 Er Pravin Suthar
的建议确保参数被称为相同的东西。另请注意,data
部分作为 data: { disputeId: disputeId, statusId: statusId }
发送,参数名称周围没有引号。所以我最终得到:
var statusId = statusDropdown.value;
var disputeId = $("#disputeId").val();
$.ajax({
url: "/Dispute/UpdateDisputeStatus",
data: { disputeId: disputeId, statusId: statusId },
type: 'POST',
success: function (data) {
alert('Success');
},
error: function (e) {
alert('Status not changed' + e.responseText + ' : ' + e.status);
}
});
控制器结构为:
[HttpPost]
public virtual ActionResult UpdateDisputeStatus(string disputeId, string statusId)
再次感谢您的所有意见!