当前位置: 首页 > 编程语言 > C#

向MVC控制器发布序列化表单数据和附加数据?Share

时间:2023-04-10 12:49:37 C#

将序列化表单数据和附加数据发布到MVC控制器?我正在尝试向我的服务器发送一些POST请求以获取更多数据。最初,我只是发送了几种形式的信息:$.ajax({url:'SaveAllDetails',type:'POST',data:$('form').serialize(),dataType:'json'});和MVC控制器方法:[HttpPost]publicActionResultSaveAllDetails([Bind(Prefix="order")]ExistingOrderDetailsModelexistingOrderDetailsModel,[Bind(Prefix="task")]ExistingTaskDetailsModelexistingTaskDetailsModel,[Bind(Prefix="device")]DeviceDetailsModeldeviceDetailsModel){....}这很好用。MVC的模型绑定器能够正确反序列化URL编码的字符串。现在,要求发生了变化。我需要连同我的三个表单一起发送一组额外的数据。此数据数组未保存在表单中,并且没有绑定前缀。我需要在同一个Controller方法中完成这一切,因为所有验证都需要在单个事务中执行。所以,我现在有:varsubcomponentsGridRows=JSON.stringify(subcomponentsDetailsView.getAllGridData());varexistingOrderDetailsFormData=$('form#existingOrderDetailsForm').serialize();varexistingTaskDetailsFormData=$('form#existingTaskDetailsForm').serialize();vardeviceDetailsFormData=$('form#existingDeviceDetailsForm').serialize()$.ajax({url:'SaveAllDetails',类型:'POST',数据:{},数据类型:'json'});这至少出于一个原因不起作用。每个表单都表示为URL编码的字符串。subcomponentsGridRows是一个JSON结构。据我所知,MVC模型绑定器无法同时解密这两种类型的信息。解决这个问题的好方法是什么?您可能会发现以下插件很有用。这是它如何为您工作。让我们首先通过定义视图模型来清理控制器操作:publicclassMyViewModel{publicExistingOrderDetailsModelOrder{get;放;}publicExistingTaskDetailsModelTask{get;放;}publicDeviceDetailsModelDevice{get;放;}publicAdditionalRowsViewModel[]AdditionalRows{get;放;在此示例中,AdditionalRowsViewModel显然会保存您尝试传递给控制器??操作的附加信息。那么你的controlleraction就会变成:[HttpPost]publicActionResultSaveAllDetails(MyViewModelmodel){....}好吧,这一步是绝对必要的,只是当我看到controlleractiontakemorethan1parameter时,我只是定义了一个viewmodel。最后让我们调整我们的AJAX调用:$.ajax({url:'SaveAllDetails',type:'POST',contentType:'application/json',data:JSON.stringify({order:$('form#existingOrderDetailsForm').serializeObject(),任务:$('form#existingTaskDetailsForm').serializeObject(),设备:$('form#existingDeviceDetailsForm').serializeObject(),additionalRows:subcomponentsDetailsView.getAllGridData()}),成功:function(result){//在这里对AJAX调用的结果做一些事情}});注意事项:以上是C#学习教程:postserializedformdataandadditionaldatatotheMVCcontroller?所有分享的内容,如果对你有用,需要进一步了解C#学习教程,希望你多多关注——去掉你的AJAX请求中的这个dataType:'json'参数。您正在使用ASP.NETMVC并期望您从成功将Content-Type响应标头设置为正确值的控制器操作返回Jsonresult。jQuery足够聪明,可以使用此响应标头的值并预处理将传递给AJAX请求的成功回调的结果变量。所以在这种情况下你会得到一个javascript对象因为你在AJAX请求中发送JSON到服务器,你需要正确指定contentType:application/json参数。否则,您如何期望ASP.NETMVC知道客户端正在发送JSON并应用正确的模型绑定器?顺便说一句,jQuery将发送的默认Content-Type请求标头是application/x-www-form-urlencoded,因此如果您在POST请求中发送JSON负载,那将是冲突并违反协议。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: