#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] в действии.
Модель, которую вы используете в индексе, та же модель, которую вам нужно использовать в качестве параметра в действии. Пожалуйста, проверьте вышеуказанные критерии, вы определенно сможете сериализовать объект формы, если вам это не удалось, скажите мне, мы решим вашу проблему.
Спасибо.