Опубликовать массив сложных объектов с помощью JSON, JQuery в ASP.NET MVC Controller - PullRequest
4 голосов
/ 17 апреля 2009

Я знаю, что этот вопрос уже затрагивался, например, здесь

Но решения, похоже, не соответствуют моей проблеме.

Вот мой HTML. Количество строк является переменным

 <table id="workPlanTable">
    <tr>
        <th>
            Begin
        </th>
        <th>
            End
        </th>
    </tr>

    <tr itemId="1">
        <td><input class="begin" id="begin_1" name="begin_1" type="text" value="5:30" /></td>
        <td><input class="end" id="end_1" name="end_1" type="text" value="11:30" /></td>
    </tr>
    <tr itemId="3">
        <td><input class="begin" id="begin_3" name="begin_3" type="text" value="5:30" /></td>
        <td><input class="end" id="end_3" name="end_3" type="text" value="7:30" /></td>
    </tr>

</table>

js создает массив объектов и отправляет их в метод управления

<script type="text/javascript">
$(function() {

    submitForm = function() {
        var items = new Array();
        $("#workPlanTable tr").each(function(i) {

            var end = $(this).find(".end").val();
            var begin = $(this).find(".begin").val();

            var item = {
                "Begin": begin,
                "End": end
            };
            items.push(item);

        }
        );

        var postData = { myItems: items };

        $.ajax({
            url: '~/WorkPlan/AjaxUpdate',
            type: 'POST',
            dataType: 'json',
            data: postData,
            contentType: 'application/json; charset=utf-8',
            success: function(result) {
                alert(result.Result);
            }
        });

    }

}
)     
</script>

Каждая строка представляет собой WorkPlanItem. Моя цель - отправить их все на мой контроллер, чтобы обновить их.

Я не могу понять, как получить доступ к массиву в методе моего контроллера (AjaxUpdate)

1 Ответ

7 голосов
/ 17 апреля 2009

Вы можете сериализовать форму как Викас опубликовал , или вы можете использовать stringify функцию , если вы предпочитаете просматривать страницу (как вы это делаете в настоящее время) используйте массив postData.

На контроллере вам нужно обработать строку json. Вы можете использовать System.Web.Script.Serialization.JavaScriptSerializer class , чтобы десериализовать его. Если у вас есть объект, который сопоставляется с данными, которые вы передаете, вы можете использовать метод Deserialize . Если вы этого не сделаете, вы все равно можете использовать DeserializeObject , однако это дает вам коллекцию Dictionary<string, string>, через которую вам придется пройти, чтобы получить свои данные. Не совсем весело (поверь мне), но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...