javascript中是否有更标准化的方法来转换(序列化)非表单数据以与ajax一起使用



我使用的是asp.net mvc 3,并且有强类型的模型要传递给它。如果数据的形式正确,模型就会接受数据。这种形式要求数据以NameMatchingModel=value&分隔。例如,如果我有:

视图模型:

public class CarViewModel
{
 public Car Car { get; set; }
}
public class Car
{
 public string Make { get; set; }
 public string Model { get; set; }
}

然后我有了一个接受ViewModel 的方法

public ActionResult AcceptCarVM( CarViewModel model )
{
 //TODO: use car data
 return View();
}

现在,我想传递的视图模型充满了一些细节的汽车。有比这种手动方式更好的方法吗?

var carMake = "Ford";
var carModel = "Pinto";
var viewModelData = "Car.Make=" + carMake + "&Car.Model=" + carModel;
var encodeData = encodeURIComponent(viewModelData);
$.ajax({
            url: "@(Url.Action("AcceptCarVM"))",
            type: 'GET',
            data: encodeData,
            success: function (result) {
                //TODO: use result
        }
});
jQuery具有序列化查询字符串的功能
$.param

这是的文档

您当然会以不同的方式提供您的数据。。。但由于您正在嵌套类型,我可以建议使用.toDictionary插件,该插件将正确地序列化JSON对象,而不管其结构如何,并以Asp.netMVC在数据绑定时能够理解的方式转换日期。

var data = {
    Car: {
        Make: "Ford",
        Model: "Pinto"
    }
};
$.ajax({
    url: "@(Url.Action("AcceptCarVM"))",
    type: 'GET',
    data: $.toDictionary(data),
    success: function(result) {
        // TODO: use result
    }
});

甚至:

var data = {
    Make: "Ford",
    Model: "Pinto"
};
$.ajax({
    url: "@(Url.Action("AcceptCarVM"))",
    type: 'GET',
    data: $.toDictionary(data, "Car"), // will provide root object's name
    success: function(result) {
        // TODO: use result
    }
});

第二种方法在控制器操作采用两个相同类型的参数时特别有用,因此您可以提供与操作参数名称相同的根对象名称,这样它们就可以正确地获得服务器端绑定的数据,即:

public ActionResult AcceptCarVM(CarViewModel carOne, CarViewModel carTwo) { ... }

插件内部使用jQuery功能,因此它可以可靠地序列化内容,特别适合Asp.net MVC后端。

相关内容

  • 没有找到相关文章

最新更新