Сериализация формы MVC с помощью jQuery

#javascript #c# #jquery #json #asp.net-mvc

#javascript #c# #jquery #json #asp.net-mvc

Вопрос:

Возможно ли сериализовать форму MVC с помощью jQuery так же, как это делает движок MVC? Точнее, будучи достаточно умным, чтобы «собрать» входные данные в объекты модели?

Например, предположим, что это моя простая модель:

 public List<Person> People {get;set;}
  

И это моя форма:

 <form>
    <input name="People[0].Id" value="9B776FB9-28B9-4364-A320-22E00A3E05D4" type="hidden">
    <input name="People[0].Name" value="Jon Doe" type="hidden">
</form>
  

Желаемый результат:

 People: [
    {
        Id: "9B776FB9-28B9-4364-A320-22E00A3E05D4",
        Name: "Jon Doe"
    }
]
  

Я пытался с помощью $(«form»).serialize(), но это возвращенный Json:

 [
    {
        name: "People[0].Id",
        value: "9B776FB9-28B9-4364-A320-22E00A3E05D4"
    },
    {
        name: "People[0].Name",
        value: "Jon Doe"
    }
]
  

Как вы можете видеть, то, что он делает, просто возвращает каждый входной сигнал как отдельный объект, а не «Понимает», что два входных сигнала представляют каждый свойство одного и того же объекта.

Как я могу этого добиться?

JsFiddle: https://jsfiddle.net/abu6mh1z /

Комментарии:

1. $("form").serialize() не возвращает это — оно возвращает { People[0].Id: '9B776FB9-28B9-4364-A320-22E00A3E05D4', People[0].Name: 'Jon Doe' } . Почему вы не хотите использовать .serialize() то, что правильно и будет привязано к вашей модели ( List<Person> model ) при ее публикации (и ваша скрипка использует .serializeArray() , а не .serialize() )

2. @StephenMuecke Это так. Проверьте его результат в консоли JsFiddler.

3. @Oluwafemi, Прочитай последнее предложение моего последнего комментария 🙂

4. @StephenMuecke это правда, я использовал serializeArray() в jsFiddle, потому что serialize() не возвращает Json. Как мне вернуть Json из serialize(), чтобы я мог проверить, что вы говорите?

5. Зачем вам нужен json? Вы всегда можете использовать JSON.stringify($("form").serialize()) , но я предполагаю, что это вызов ajax, поэтому в нем вообще нет необходимости — просто используйте data: $('form').serialize(), и не включайте contentType опцию

Ответ №1:

Я уже использую объект Serialize form в своем проекте.

Вы должны написать приведенный ниже код для сериализации объекта формы .

 var formId = '#form2';

var SData = $(formId).serialize();
  

Вы должны определить форму в индексе представления .

 <form id="form2">
  

Если вы используете метод Post, то вам необходимо определить [HttpPost] в действии.


Модель, которую вы используете в индексе, та же модель, которую вам нужно использовать в качестве параметра в действии. Пожалуйста, проверьте вышеуказанные критерии, вы определенно сможете сериализовать объект формы, если вам это не удалось, скажите мне, мы решим вашу проблему.

Спасибо.