簡體   English   中英

您如何序列化JS數組,以便Asp.net MVC可以將其綁定到ac#列表?

[英]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;全局禁用此功能。

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

好吧,這是我現在寫的東西,可以正常工作!

這是動作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM