2013-07-22 2 views
3

Я использую JQuery для отправки данных через AJAX, и в хромированных инструментов он показывает данные отправляются как это:MVC контроллер, принимать параметры в качестве класса

PermssionArray[0][Permitted]:false 
PermssionArray[0][Id]:2 
PermssionArray[1][Permitted]:true 
PermssionArray[1][Id]:3 
PermssionArray[2][Permitted]:true 
PermssionArray[2][Id]:4 

Мой контроллер выглядит так:

public ActionResult UpdatePermissions(PermSet[] PermssionArray) 

И мой класс PermSet как это:

public class PermSet 
     { 
      public int Id { get; set; } 
      public bool Permitted { get; set; } 
     } 

Если я останова в контроллере, это имеет 3 пунктов я n массив PermssionArray, но все значения id = 0, allowed = false.

Что мне нужно изменить, чтобы исправить это?

+3

Вам необходимо перейти к пользовательской привязке модели или получить данные из FormCollection. – Satpal

ответ

5

Списки действительно странные в ASP.Net MVC, и у вас есть опции для получения данных на сервере.

  1. Используйте привязку модели по умолчанию в ASP.NET MVC. Это требует, чтобы вы изменили свою модель, чтобы отправить ее обратно в определенном формате. Посмотрите на сообщение Фила Хаака. Это работает, но может быть волосатым, если у вас много списков. http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

  2. Второй вариант - использовать jQuery для обхода вашего сообщения и сериализации формы в документе JSON, а затем POST на сервере. Вариант 2 намного проще, но требует, чтобы вы обрабатывали запросы ajax, а не выполняли действия POST/Redirect.

    • использование JSON.stringify (модель)
    • возвращает ответ, который включает в себя следующую страницу для перенаправления на успех
    • обратный ответ, который включает в себя любое сообщение об ошибке

Предположим, вы знаете, как использовать jQuery и метод $ .ajax.

Я начал больше наклоняться к варианту два, когда сложность страницы начинает увеличиваться. Единственный недостаток - вам нужна действительно хорошая история клиента. Рассмотрите возможность использования knockout.js, так как это позволит вам преобразовать вашу форму в JSON с помощью ko.toJSON.

Сообщите мне, если вы хотите, чтобы я подробно остановился на чем-либо.

Смежные вопросы