Mvc Jquery Ajax Post 返回 null
Posted
技术标签:
【中文标题】Mvc Jquery Ajax Post 返回 null【英文标题】:Mvc Jquery Ajax Post returns null 【发布时间】:2015-11-27 22:59:42 【问题描述】:我一直在尝试发布两个参数... 这是ajax代码
function Kaydet()
var params = ;
var Kiralayan = $("#RentForm").serialize();
params.kisi = Kiralayan ;
params.aracid = P.AracID;
console.log(params);
$.ajax(
type: "POST",
url: '@Url.Action("Save","AracKirala")',
data: params,
dataType: "text",
success: function (response)
if (response != "OK")
alert("Kayıt yapılamadı.");
else
document.getElementById("RentForm").reset();
alert("Kayıt başarıyla gerçekleştirildi.");
$("#myModal").modal('hide');
Ara();
);
方法
public ActionResult Save(Kiralayan kisi = null, int aracid = 0)
问题是 ajax 正确地发布“aracid”,但在触发该方法时“kisi”变为空...... 我尝试不使用“kisi”发布“aracid”,因此 ajax 可以很好地为一个参数“kisi”发布,但不能一起使用......
【问题讨论】:
将整个表单序列化为一个变量似乎很奇怪。您是否在控制台的网络选项卡中查看了 Ajax 请求中发送的内容? 您选择后两个几乎相同的答案,而只选择评论另一个有什么特别的原因吗? 【参考方案1】:如果您对表单进行序列化,则可以使用.param()
函数向其添加其他值
var data = $("#RentForm").serialize() + '&' + $.param( 'aracid': AracID , true);
$.ajax(
type: "POST",
url: '@Url.Action("Save","AracKirala")',
data: data,
....
【讨论】:
他不应该也换个控制器吗?我的意思是在模型中添加aracid
属性?
没有。 $("#RentForm").serialize()
本身将绑定到 Kiralayan kisi
,这只是将 ..&aracid=someValue
添加到表单数据中,因此它将绑定到附加参数
那你能告诉我如果 ViewModel 有aracid
属性和控制器有相同的额外参数aracid
会发生什么吗?
嗯,我从来没有测试过 :),但我猜只有一个会被绑定(DefaultModelBinder
会忽略随后的具有相同名称的 name/value
对,除非属性是 IEnumerable
) 但我不确定。明天要测试的东西。我会告诉你的。
@teo van kot:如果名称出现在模型和参数中,它将映射到模型属性和额外参数。我自己的答案已更新以包含这个小事实。【参考方案2】:
MVC 会为您映射对象,因此您不妨跳过对象内表单的提取嵌套。
注意事项:
如果aracid
也是模型中的一个属性,它将映射到both属性和额外参数。
在 serialise()
集合上使用 push 比在 serialize()
调用之前连接字符串的替代方法更易于维护。
例如
var Kiralayan = $("#RentForm").serialize();
// Add the extra non-form parameter
Kiralayan.push(name: 'aracid', value: P.AracID);
完整示例:
function Kaydet()
var Kiralayan = $("#RentForm").serialize();
// Add the extra non-form parameter
Kiralayan.push(name: 'aracid', value: P.AracID);
console.log(params);
$.ajax(
type: "POST",
url: '@Url.Action("Save","AracKirala")',
data: Kiralayan,
dataType: "text",
success: function (response)
if (response != "OK")
alert("Kayıt yapılamadı.");
else
document.getElementById("RentForm").reset();
alert("Kayıt başarıyla gerçekleştirildi.");
$("#myModal").modal('hide');
Ara();
);
【讨论】:
以上是关于Mvc Jquery Ajax Post 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
mvc中的ajax jquery-方法返回不是布尔类型的True [重复]
Jquery Ajax,从 mvc.net 控制器返回成功/错误