Вопрос о JSON и сериализации - PullRequest
2 голосов
/ 23 июля 2011

У меня строго типизированное представление с моей моделью представления, которая содержит объект «Человек» и «Список навыков». Человек довольно прост. Я использую Html Helpers, как это @Html.TextBoxFor(m => m.Person.FirstName). Я отправляю свою форму и получаю то, что хочу.

Проблема в моем списке навыков.

При вызове AJAX я получаю результат JSON, представляющий собой массив навыков.

Как мне отправить комбинацию навыков и человека в мой метод HTTPPOST?

Я вижу две возможности.

  1. Тот, который я предпочитаю, но понятия не имею, как правильно реализовать: Каким-то образом удается получить этот результат JSON в мою модель представления (List<Skill> skilllist) и использовать стандартную отправку кнопку и получить его в моем методе HTTPPOST, как это. (см. встроенные комментарии)

    [HttpPost]
    public ActionResult RegisterPersonAndSkills(PersonSkillViewModel model)
    {
       // I can acces the Person object and its properties
       string firstname = model.Person.FirstName;
    
       // It would be awesome if I could access the list which used to be a JSONresult
       string skillname = model.SkillList[0].SkillName
    
       return null;
    }
    
  2. Попробуйте преобразовать, сериализовать все, что находится в форме (часть объекта Person), в результат JSON, вставить массив полученных с помощью json результатов навыков в эту сериализованную модель представления и получить модель через привязку модели. С тем же результатом, что и вышеописанный метод. Опять же, я не уверен, как это реализовать и как справиться с возможными проблемами проверки. Кажется, много работы для сериализации каждого свойства Person в JSON и добавления объекта Person и массива навыков в JSON PersonSkillViewModel.

Как бы вы решили эту проблему?

Или просто невозможно получить оба результата в одном параметре?

1 Ответ

2 голосов
/ 23 июля 2011

Самый простой способ достичь желаемого результата # 1 - добавить массив навыков, полученный при вызове AJAX, в DOM через клиентскую часть скрытых полей. Вам нужно будет использовать соглашение об именах, которое связыватель модели по умолчанию использует (у меня нет открытого VS, но если вы заполните массив Skills Array методом GET и добавите для каждого из них Html.HiddenFor <> вы должны увидеть синтаксис.)

Таким образом, вам понадобится JS для обработки клиентской части JSON-запроса и добавления его в DOM ... это всего лишь несколько строк с Jquery, но вы не упомянули, как вы получаете Ajax-запрос массива навыков .

...