Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jqueryajax将两个数据模型从视图传递到控制器_Jquery_Ajax_Model View Controller_Ajaxform - Fatal编程技术网

如何使用jqueryajax将两个数据模型从视图传递到控制器

如何使用jqueryajax将两个数据模型从视图传递到控制器,jquery,ajax,model-view-controller,ajaxform,Jquery,Ajax,Model View Controller,Ajaxform,我正在使用MVC开发web应用程序。在一个例子中,我将使用jQueryAjax方法从我的视图中调用服务器端操作。我必须将两个模型对象作为数据传递给ajax,但每次它都传递空值。我想解决我的问题,但不满意。那么,如何使用jQueryAjax传递模型对象呢 用于调用操作的Jquery代码 $("#btnAddAjax").click(function(e){ e.preventDefault(); var usermodel =

我正在使用MVC开发web应用程序。在一个例子中,我将使用jQueryAjax方法从我的视图中调用服务器端操作。我必须将两个模型对象作为数据传递给ajax,但每次它都传递空值。我想解决我的问题,但不满意。那么,如何使用jQueryAjax传递模型对象呢

用于调用操作的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<System.DateTime> CM_AgreementSignDate { get; set; }
}
公共类用户\u主机
{
[必需(ErrorMessage=“*请输入租户的名字”)]
公共字符串TN_FirstName{get;set;}
[必需(ErrorMessage=“*请输入租户的姓氏”)]
公共字符串TN_LastName{get;set;}
}
公共部分类CityDate
{
[必需(ErrorMessage=“*请选择您的城市。”)]
公共字符串PR_City{get;set;}
[必需(ErrorMessage=“*请选择日期”)]
公共可为空的CM_AgreementSignDate{get;set;}
}
最后,我将使用jQueryAjax调用以下操作(用于部分视图)

[HttpPost]
    public PartialViewResult AllLandLord(User_Master usermaster, CityDate citydate)
    {
        List<User_Master> allLandLord = new List<User_Master>();
        if (ModelState.IsValid)
        {
            allLandLord = agreementnewBAL.AllLandLordUsers();
            return PartialView("LoadLandLord", allLandLord);
        }
        else
        {
            return PartialView("LoadLandLord", allLandLord);
        }
    }
[HttpPost]
public PartialViewResult AllLown(用户\u Master用户Master,CityDate CityDate)
{
List ALLONDER=新列表();
if(ModelState.IsValid)
{
allland=agreementnewBAL.alllandordusers();
返回部分视图(“装货业主”,所有业主);
}
其他的
{
返回部分视图(“装货业主”,所有业主);
}
}

我制作了一个快速演示:

基本行动:

[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; }
}
我的剧本:

 <script type="text/javascript">
    $("#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");
            }
        });
    });
</script>
从我的例子变成

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()
};

可能是因为在ajax调用中将内容类型设置为html。您是否尝试删除该行或指定JSON?如果我使用contentType来
JSON
。它会弹出错误。如果删除该行呢?当我重新移动该行时,它不会像往常一样传递任何内容,
null
。发现此问题,看起来像是您正在尝试执行的操作。好的,杰伊,我会试试这个你好,杰伊,很好的解决方案,但这对我不起作用。有什么不同的方法来实现这一点吗?编辑我的答案,您需要使您的数据:行与我使用的控制器参数名称相匹配
data:JSON.stringify({usermaster:usermodel,citydata:citydatamodel}),
,但它没有执行。如果您的代码中发现另一个问题,请对我的答案进行编辑。为了使JSON绑定工作,JSON中的变量名必须与模型中的属性名相匹配。
var usermodel = {
   TN_FirstName:$("#txtFirstName").val(),
   TN_LaststName:$("#txtFirstName").val()
};
var citydatemodel = {
    CM_AgreementSignData:$("#SignDate").val(),
    PR_City: $("#selectCity").val()
};