[英]Sending Complex Objects to Controller with Ajax
我有一個 MVC 應用程序,我試圖通過 ajax 調用提交表單,同時還傳入另一個復雜的 object。 這意味着我將 2 個復雜對象傳遞回 controller:表單數據和 object 數組。 問題是,如果我將 contentType 設置為“application/x-www-form-urlencoded”,但 object 數組作為 Z37A6259CC0C1DAE299A7866489DFF0BD. 如果我將 contentType 設置為“application/json”,則 object 數組將其變為 controller 就好了,但表單數據是 null。 所以我想我基本上需要將表單數據轉換為json object。 這是我所擁有的:
視圖模型:
Public FOO foo
{
public ObjectBar BarObject {get; set;}
public string BarString {get; set;}
// more properties
}
Controller:
[HTTPPost]
Public ActionResult Submit(Foo viewModel, OtherObject[] dataSet)
{
//do stuff
}
看法:
// bunch of fields
<script>
function submitForm(e) {
debugger;
var dataSets = getGridData();
var form = $("#formName").serialize();
var data = JSON.stringify({ viewModel: form, dataSet: dataSets }); //this is close, need to convert form data to json
return $.ajax({
type: "POST",
url: '@Url.Action("Submit", "Report")',
data: data,
contentType: 'application/json',
processData: false,
});
}
//some more javascript stuff
</script>
搜索堆棧溢出,似乎我需要做的就是將表單數據轉換為 json 類似於
var jsonForm = JSON.parse(JSON.stringify(form));
但由於某種原因,這不起作用,即使我只是嘗試將 jsonForm 傳遞給 controller 與 viewModel 參數。 我應該使用其他東西來轉換,還是我只是錯過了一些東西?
在堆棧溢出的這個答案的幫助下:
使用 jQuery 將表單數據轉換為 JavaScript object
我發現了這個說法:
$('form').serializeArray().map(function(x){this[x.name] = x.value; return this;}.bind({}))[0]
所以我更新了我的代碼並結束了這個:
function submitForm(e) {
debugger;
var dataSets = getGridData();
var form = $("#formName").serializeArray().map(function (x) { this[x.name] = x.value; return this; }.bind({}))[0];
var data = JSON.stringify({ viewModel: form, dataSets: dataSets }); //this is close, need to convert form to json... now this works!
return $.ajax({
type: "POST",
url: '@Url.Action("Submit", "Report")',
data: data,
contentType: 'application/json; charset=utf-8',
processData: true,
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.