我正在使用MVC开发Web应用程序。 在一种情况下,我将使用jquery ajax方法从我的视图中调用服务器端操作。 我必须传递两个模型对象作为ajax的数据,但每次传递空值。 我提到了在jquery中使用AJAX Post的正确方法来从强类型MVC3视图传递模型来解决我的问题,但是不满意。 那么如何使用jquery ajax传递我的模型对象呢?
用于调用Action的Jquery代码
$("#btnAddAjax").click(function(e){
e.preventDefault();
var usermodel = {
US_FirstName:$("#txtFirstName").val(),
US_LaststName:$("#txtFirstName").val()
};
var citydatemodel = {
date:$("#SignDate").val(),
city: $("#selectCity").val()
};
$.ajax({
url:'@Url.Action("AllLandLord")',
contentType:'application/json; charset=utf-8',
data: JSON.stringify({User: usermodel, testM: citydatemodel}),
UpdateTargetId:"dvLandLord3",
type:'POST',
success:function(data){
$("#dvLandLord3").html(data);
},
error:function(){
alert('Something Wrong !!!');
}
});
});
我有两个模型,为此我从viewModel调用它
public class User_Master
{
[Required(ErrorMessage ="* Please Enter First Name For Tenant")]
public string TN_FirstName { get; set; }
[Required(ErrorMessage ="* Please Enter Last Name For Tenant")]
public string TN_LastName { get; set; }
}
public partial class CityDate
{
[Required(ErrorMessage ="* Please Select Your City.")]
public string PR_City { get; set; }
[Required(ErrorMessage ="* Please Select Date")]
public Nullable CM_AgreementSignDate { get; set; }
}
最后,我将使用jquery ajax调用以下操作(用于部分视图)。
[HttpPost]
public PartialViewResult AllLandLord(User_Master usermaster, CityDate citydate)
{
List allLandLord = new List();
if (ModelState.IsValid)
{
allLandLord = agreementnewBAL.AllLandLordUsers();
return PartialView("LoadLandLord", allLandLord);
}
else
{
return PartialView("LoadLandLord", allLandLord);
}
}
可能是因为您在ajax调用中将内容类型设置为html。 您是否尝试删除该行或指定JSON?
好的,我会检查一下。
如果我使用contentType到JSON。 它会弹出错误。
如果删除该行怎么办?
当我重新开始那条线时,它没有像往常一样传递任何东西,null。
发现这个问题,看起来就像你想要做的那样。stackoverflow.com/questions/1545316/
我也提到了链接,但无法解决问题
我整理了一个快速演示:
基本动作:
[HttpPost]
public ActionResult TestMethod(userModel User, testModel testM)
{
return View();
}
型号:
public class testModel
{
public string UserType { get; set; }
}
public class userModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我的javqascript:
$("#myButton").click(function () {
var usermodel = {
FirstName: 'testfn',
LastName: 'testln'
}
var testmodel = {
UserType: 'test'
}
$.ajax({
url: '@Url.Action("TestMethod")',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({User: usermodel, testM: testmodel}),
type:"POST",
success:function(data){
alert("success");
},
error: function(){
alert("error");
}
});
});
调用JS导致我分配的数据正确传递给操作。
您应该能够更新我的JS代码,以使其在您的项目中工作。
编辑:
数据:ajax调用的组件需要与您的控制器匹配
data: JSON.stringify({User: usermodel, testM: testmodel}),
从我的例子成为
data: JSON.stringify({usermaster: usermodel, citydata: citydatamodel}),
编辑2:
您还需要确保您的js模型与您的MVC模型匹配:
var usermodel = {
US_FirstName:$("#txtFirstName").val(),
US_LaststName:$("#txtFirstName").val()
};
var citydatemodel = {
date:$("#SignDate").val(),
city: $("#selectCity").val()
};
这些与您的MVC模型不匹配。
var usermodel = {
TN_FirstName:$("#txtFirstName").val(),
TN_LaststName:$("#txtFirstName").val()
};
var citydatemodel = {
CM_AgreementSignData:$("#SignDate").val(),
PR_City: $("#selectCity").val()
};
好的杰伊,我会试试这个
你好周杰伦,很好的解决方案,但这不适合我。 有没有不同的方法来实现这个?
你可以用你试过的内容更新你的问题吗?
请参阅我编辑的jquery代码
编辑了我的答案,你需要制作你的数据:行匹配你的控制器参数名称
我使用data: JSON.stringify({usermaster: usermodel, citydata: citydatamodel}),,但它没有执行
发现你的代码的另一个问题,编辑我的答案。 要使JSON绑定起作用,JSON中的变量名称必须与模型中的属性名称匹配。
你好杰伊,这是我在宣言中usermaster的拼写错误,它现在正在运作。 我使用调试器检查,但它只发送firstName来操作其他参数仍然是null。
完善。 根据您的建议,我将变量名称和属性名称匹配,从而得到正确的答案。 非常感谢。
没问题。 很高兴你把事情解决了