[英]Can you convert C# dictionary to Javascript associative array using asp.net mvc Json()
[英]How do you serialize a JS array so Asp.net MVC can bind it to a c# list?
我試圖將一個可排序的jquery項目列表發送到我的MVC方法進行數據處理。 目前,我正在嘗試通過以下代碼發送它:
var data = {};
data.projectId = projectId;
data.publishedSectionIds = $('#section_list').sortable('toArray');
// Perform the ajax
$.ajax({ url: '/Project/Publish',
type: 'POST',
data: data,
success: function (result) {
alert(result.message);
}
});
這段代碼的問題是它使Post參數看起來像這樣:
projectId=2&publishedSectionIds[]=1&publishedSectionIds[]=2
這個問題(可以從此問題的解決方案中看到)是,如果post參數沒有括號,則MVC似乎只能序列化為List。
我如何序列化javascript數組,以便使用List<int>
參數模型進行的操作正確綁定?
public ActionResult Publish(int projectId, List<int> publishedSectionIds)
嘗試添加以下傳統選項:true
例如
$.ajax({ url: '/Project/Publish',
type: 'POST',
data: data,
traditional: true,
success: function (result) {
alert(result.message);
}
});
看到
從jQuery 1.4開始,$ .param()方法遞歸地序列化深層對象,以適應現代腳本語言和框架,例如PHP和Ruby on Rails。 您可以通過設置jQuery.ajaxSettings.traditional = true;全局禁用此功能。
好吧,這是我現在寫的東西,可以正常工作!
這是動作:
Public Overridable Function PostProject(ByVal model As Project) As ActionResult
Return Json(model.PublishedSectionIds)
End Function
這是課程:
Public Class Project
Public Property ProjectId As Integer
Public Property PublishedSectionIds As IList(Of Integer)
End Class
這是JavaScript:
var data = {};
data.ProjectId = 1;
data.PublishedSectionIds = $('#section_list').sortable('toArray');
var url= "/testing/tester";
$.ajax({
url:url,
type: 'POST',
traditional: true,
data: data,
success: function (result) {
alert(result);
}
});
忽略我的行為是可替代的事實。 那只是來自t4mvc。
我用列表和IList或List嘗試了一下,兩者都很好。
希望有幫助!
編輯:
我也沒有模型就對它進行了測試,如下所示:
Public Overridable Function PostProject2(ByVal ProjectId As Integer, ByVal PublishedSectionIds As List(Of Integer)) As ActionResult
Return Json(PublishedSectionIds)
End Function
添加它也很好。
如果您想在JS中完全處理它(您可能需要編輯第2行-我假設您使用的是列表,並嘗試提取id屬性本身)
var data = "projectId=" + projectId;
$("#section_list li").each(function(){ data += "&publishedSectionIds=" + this.id;});
$.ajax({ url: '/main/test',
type: 'POST',
data: data,
success: function (result) {
alert(result.message);
}
});
或者如果您想確保使用的是sortable('toArray')數據(盡管以上結果還提供了已排序的數據)
var data = "projectId=" + projectId;
var tempData = $('#section_list').sortable('toArray');
$.each(tempData, function(index, value){ data += "&publishedSectionIds=" + value;});
$.ajax({ url: '/main/test',
type: 'POST',
data: data,
success: function (result) {
alert(result.message);
}
});
當我將JavaScript數組傳遞到post方法中時,我將它們鍵入為int[]
而不是List<int>
。
如果沒有,請嘗試此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.