我试图抓住一些额外的数据POST请求发送到我的服务器。最初,我只发送几种形式的信息价值:将序列化表单数据和附加数据发布到MVC控制器?
$.ajax({
url: 'SaveAllDetails',
type: 'POST',
data: $('form').serialize(),
dataType: 'json'
});
和MVC控制器方法:
[HttpPost]
public ActionResult SaveAllDetails([Bind(Prefix = "order")]ExistingOrderDetailsModel existingOrderDetailsModel,
[Bind(Prefix = "task")]ExistingTaskDetailsModel existingTaskDetailsModel, [Bind(Prefix = "device")]DeviceDetailsModel deviceDetailsModel)
{
....
}
这个伟大的工程。 MVC的模型绑定器能够正确地反序列化URL编码的字符串。
现在,需求已经改变。我需要发送一组额外的数据以及我的三种形式。该数组数据不在表单内,并且没有绑定前缀。我需要在同一个Controller方法中完成这一切,因为所有验证都需要在单个事务中执行。
所以,我现在已经有了:
var subcomponentsGridRows = JSON.stringify(subcomponentsDetailsView.getAllGridData());
var existingOrderDetailsFormData = $('form#existingOrderDetailsForm').serialize();
var existingTaskDetailsFormData = $('form#existingTaskDetailsForm').serialize();
var deviceDetailsFormData = $('form#existingDeviceDetailsForm').serialize()
$.ajax({
url: 'SaveAllDetails',
type: 'POST',
data: {
existingOrderDetailsModel: existingOrderDetailsFormData,
existingTaskDetailsModel: existingTaskDetailsFormData,
deviceDetailsModel: deviceDetailsFormData,
subcomponentsGridRows: subcomponentsGridRows
},
dataType: 'json'
});
这并不适用于至少一个工作的原因所在。每个表单都表示为URL编码的字符串。 subcomponentsGridRows是一个JSON结构。据我所知,MVC模型绑定器无法一次破译这两种类型的信息。
解决此问题的最佳方法是什么?
'subcomponentsGridRows是一个JSON结构,并且MVC模型绑定器不能破译那个混乱'。怎么会这样?如果您创建了一个代表此结构的模型(例如,使用此网站:http://json2csharp.com/),则模型活页夹将会愉快地绑定它。 –
你可以在提交之前合并数据或在POST URL中使用GET来传递其他信息... – dandavis
@SimonWhitehead当我将数据发布到服务器时,我必须指出我要发送什么类型的信息。这些表单是URL编码的实体。网格数据是一个JSON结构。 MVC会乐意接受其中一个,但据我所知,在一个请求中并不是一个简单的方法来结合它们。 –