通过ajax将模型和其他值传递给Controller

时间:2017-02-09 14:09:26

标签: c# jquery ajax asp.net-mvc

代码粗略写入,因为我无法将它们带回家。

我目前正在开发这个有很多进程的应用程序。在这种情况下,我有控制器调用服务器,进行一些处理,将数据存储到模型中并将其传递给视图。

在视图站点中,我隐藏了模型的某些部分,因此我可以在需要时将其再次传递给控制器​​(我不想多次调用服务器)。

然后,当视图中发生某些动作时,隐藏值将通过ajax传递给控制器​​。

我知道如何传递整数,日期和类似的东西。现在的问题是如何传递我从第一个控制器获得的模型?我真的不知道我做错了什么。以下是我的代码:

模型

public class ViewFacilitiesModel(){
    public int id {get;set;}
    public List<TimeSlotsModel> tsm {get;set;}
    public List<UsersModel> um {get;set;}
}

public class TimeSlotsModel(){
    public int id {get;set;}
    public TimeSpan openHour {get;set;}
}

public class UsersModel(){
    public int userId {get;set;}
    public string email {get;set;}
}

控制器

public virtual ActionResult ViewFacilities(){
    ViewFacilitiesModel vfm = new ViewFacilitiesModel();
    vfm.id = 1;
    vfm.tsl = someList;
    vfm.um = anotherList;

    return View(vfm);
}

public ActionResult GetTimings(DateTime testdate, ViewFacilitiesModel vfm){
    //do some other stuff here
}

ViewFacilities.cshtml

@using Project.Models

@Html.HiddenFor(m => m.tsm)
@Html.HiddenFor(m => m.um)


$.ajax({
    url: Url.Action("GetTimings", "Booking"),
    data: {
        'testdate': $("#datepicker").datepicker("getDate"),
        'vfm': JSON.stringify(@Model)
    }
});

数据'testdate'已成功通过。我真的不知道如何传递模型。它每次出来都是空的。

更新 我已经尝试逐个传递隐藏的值,但我似乎无法通过原始数据类型。例如,如果隐藏值的类型为 List ,我似乎无法通过ajax将其传递给控制器​​。

2 个答案:

答案 0 :(得分:0)

你不能这样做:'vfm': JSON.stringify(@Model)

我知道最简单的方法是将所有模型值放在form中,然后使用jQuery对其进行序列化。像这样:

@using Project.Models

<form id="my-hidden-form">
   @Html.HiddenFor(m => m.tsm)
   @Html.HiddenFor(m => m.um)
   //here your other properties
</form>

$.ajax({
    url: Url.Action("GetTimings", "Booking"),
    data: {
        'testdate': $("#datepicker").datepicker("getDate"),
        'vfm': $(#my-hidden-form).serialize() //here you serialize
    }
});

答案 1 :(得分:0)

您需要序列化包含绑定到模型项的控件的表单。

 var myData = $('#myForm').serialize();

然后执行Ajax帖子

  $.ajax({
        type: "POST",
        url: Url.Action("GetTimings", "Booking"),
        data: myData,
        contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
    });

这对我有用......所以希望它有助于或者至少指出你正确的方向。