簡體   English   中英

如何在ASP.NET MVC和C#中使用序列化數據

[英]How to use serialized data in asp.net mvc and C#

我正在使用可排序的jQuery UI對DOM中的列表進行排序。 我成功地有了一個ajax函數,將該字符串發布到我的mvc操作中:

list[]=2&list[]=3&list[]=28&list[]=1

我試圖弄清楚如何將這個序列化的數字列表放入List<int>以便實際上可以從C#訪問它們。

我該怎么做? 我已經嘗試過這種方法:

    [HttpPost]
    public string RoleTierUpdate( string[] form)
    {
        StringBuilder sb = new StringBuilder();

        foreach (var item in form)
        {
            sb.AppendFormat("id: {0}<br />", item);
        }

        return sb.ToString();
    }

我當時在想可以將字符串數組轉換為整數列表。 但這返回了以下輸出:

    id: 2
    id: ,
    id: 3
    id: ,
    id: 2
    id: 8
    id: ,
    id: 1

這是將這些數據放入int列表的更簡單方法嗎?

編輯

這是執行ajax發布的代碼:

<script type="text/javascript">
    // Sortable
    $(document).ready(function () {
        $("#sortThis").sortable({
            handle: '.handle',
            update: function () {

                // get new order
                var order = $('#sortThis').sortable('serialize');

                // excecute ajax for db update
                $.post(
                    "/find/AdminMember/RoleTierUpdate/",
                    order,
                    function (data) {
                        $("#info").html(data);
                    }
                );

                $("#info2").html(">>" + order + "<<");
            }
        });

    });
</script>

order包含我上面顯示的字符串。

編輯2

將控制器更新為:

    [HttpPost]
    public string RoleTierUpdate( List<int> list, MemberData md) // change to List<int> list
    {
        StringBuilder sb = new StringBuilder();

        if (list != null) // added check for null
        {
            foreach (var item in list)
            {
                sb.AppendFormat("id: {0}<br />", item);
            }
        }
        else {
            sb.Append("form is null");
        }

        return sb.ToString();
    }

將ajax更新為:

    $(document).ready(function () {

        jQuery.ajaxSettings.traditional = true; // added

        $("#sortThis").sortable({
            handle: '.handle',
            update: function () {

                // get new order
                var order = $('#sortThis').sortable('serialize');

                // excecute ajax for db update
                $.post(
                    "/find/AdminMember/RoleTierUpdate/",
                    order,
                    function (data) {
                        $("#info").html(data);
                    }
                );

                $("#info2").html(">>" + order + "<<");
            }
        });

    });

輸出是:

form is null

看來是MVC的modelbinder不願意綁定字符串的原因

list[]=2&list[]=3&list[]=28&list[]=1 

List<int> list的原因是由於鍵中的“ []”。 我將此JavaScript添加到了jQuery:

// get new order
 var order = $('#sortThis').sortable('serialize');
 order = order.replace(/\[\]/gi, "")

一旦我從鍵中取出“ []”,一切都很棒。 該操作返回了以下結果:

id: 2
id: 3
id: 28
id: 1

這正是我所需要的。 List<int>的模型綁定工作良好。

ASP.NET將自動檢測到您正在嘗試使用列表。 做這個:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult RoleTierUpdate(List<String> list)

或將String替換為Int32如果需要整數)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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