【问题标题】:How to pass two data model from view to controller using jquery Ajax如何使用 jquery Ajax 将两个数据模型从视图传递到控制器
【发布时间】:2016-02-09 12:08:21
【问题描述】:

我正在使用 MVC 开发 Web 应用程序。在一种情况下,我将使用 jquery ajax 方法从我的视图中调用服务器端操作。我必须传递两个模型对象作为 ajax 的数据,但每次它传递空值。我推荐Proper way to use AJAX Post in jquery to pass model from strongly typed MVC3 view 来解决我的问题,但并不满意。那么如何使用 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<System.DateTime> CM_AgreementSignDate { get; set; }
}

最后,我将使用 jquery ajax 调用以下操作(用于局部视图)。

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

【问题讨论】:

  • 可能是因为您在 ajax 调用中将内容类型设置为 html。您是否尝试过删除该行或指定 JSON?
  • 如果我使用 contentType 到JSON。它会弹出错误。
  • 如果你删除那行呢?
  • 当我删除那条线时,它没有通过任何东西,null 像往常一样。
  • 找到了这个问题,看起来像你想要做的。 stackoverflow.com/questions/1545316/…

标签: jquery ajax model-view-controller ajaxform


【解决方案1】:

我整理了一个快速演示:

一个基本动作:

[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:

 <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>

调用该 JS 会导致我分配的数据正确传递给操作。

您应该能够只更新我的 JS 代码以使其在您的项目中运行。

编辑: ajax 调用的 data: 组件需要与您的控制器匹配

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

【讨论】:

  • 好的,杰,我试试这个
  • 您好 Jay,不错的解决方案,但这对我不起作用。有什么不同的方法可以实现吗?
  • 编辑了我的答案,你需要让你的数据:行匹配你的控制器参数名称
  • 我用了data: JSON.stringify({usermaster: usermodel, citydata: citydatamodel}),,但是没有执行
  • 发现您的代码存在另一个问题,对我的回答进行了编辑。为了使 JSON 绑定起作用,JSON 中的变量名称必须与模型中的属性名称匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 2016-07-08
  • 2015-04-08
相关资源
最近更新 更多