2010-07-28 53 views
5

我想發送一個jQuery可排序項目列表到我的MVC方法進行數據處理。目前,我試圖通過下面的代碼來發送:如何序列化JS數組,以便Asp.net MVC可以將它綁定到C#列表?

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); 
    } 
}); 

這段代碼的問題是它使郵政的參數是這樣的:

projectId=2&publishedSectionIds[]=1&publishedSectionIds[]=2 

這個問題(可以看出通過解決方案this question)是MVC只似乎序列化爲一個列表,如果發佈參數做不是有括號。

如何序列化javascript數組,以便我的動作與List<int>參數模型正確綁定?


編輯:動作的簽名是這樣的:

public ActionResult Publish(int projectId, List<int> publishedSectionIds) 
+0

我們可以看到您的動作簽名嗎? – Patricia 2010-08-05 20:01:33

+0

將其添加到問題中。 – KallDrexx 2010-08-05 20:10:32

+0

好吧,看我的答案,我有兩個不同的行動,這兩個工作奇妙:) – Patricia 2010-08-05 20:56:54

回答

3

嘗試添加下列選項傳統:真正

$.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;來全局禁用此功能。

http://api.jquery.com/jQuery.param/

+0

不,似乎沒有任何幫助。查詢字符串中仍然有括號,ASp.net MVC仍然無法以傳統格式對其進行序列化。 'List publishedSectionIds'不爲null,但它的計數爲零 – KallDrexx 2010-07-28 21:28:57

+0

不確定爲什麼'traditional:true'之前沒有工作,但現在我可能已經在其他地方混淆了。自從他回答了一段時間之後,將其標記爲答案,現在它正在工作。 – KallDrexx 2010-08-06 22:38:10

2

好了這裏的東西,我只是寫了現在的作品!

這裏的行動:

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或列表,都工作得很好。

希望有幫助!

編輯:

我也測試了它的w/o像這樣的模式:

Public Overridable Function PostProject2(ByVal ProjectId As Integer, ByVal PublishedSectionIds As List(Of Integer)) As ActionResult 
     Return Json(PublishedSectionIds) 

    End Function 

添加它的工作也很不錯。

0

如果您想徹底處理它在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); 
    } 
}); 

,或者你要確保你使用的排序(「指定者」)的數據(儘管上述結果還提供了排序的數據)

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); 
    } 
}); 
+0

sortable('toArray')按順序返回id的數組。他在那裏做的是非常正確的。 – Patricia 2010-08-06 13:32:07

+0

是的,即使這個方法按順序返回了id,但從發佈的數據中刪除了[]。 如果首選,我編輯代碼以使用可排序('toArray')數據。 – eapen 2010-08-06 14:08:19

0

當我通過JavaScript數組到我的帖子的方法,我鍵入它們作爲int[]不是List<int>

試試這個,如果你還沒有。

+0

不知道這封郵件的用戶是誰,但是用我的代碼示例,ASP.net服務器端應該將其視爲: projectId = 2&publishedSectionIds = 1&publishedSectionIds = 2 應該可以通過列表讀取 eapen 2010-08-06 18:23:02

相關問題