Если вы сериализуете форму, используя что-то вроде jQuery, она часто отображает ключи и значения JSON для свойств объекта в действии Controller, которое вы отправляете. Итак:Отправка нескольких элементов в контроллер MVC через jQuery.Ajax
JQuery:
function PostForm() {
$.ajax({
url: "/Home/TestMVC",
type: "POST",
dataType: "application/JSON",
data: $('#form').serialize(),
complete: callFunction
}
});
Предположив основные детали содержит элементы, которые будут иметь имя параметра в качестве ключа они должны привязать к объекту непосредственно:
Действие:
public void TestMVC(MyObject obj)
{
//Obj should now contain the data from the serialised form
}
POST:
Name: "Bob"
Age: "999"
Sex: "Unknown"
Кто-нибудь знает, как это работает? Он ломается каждый раз, когда я передаю форму и любые дополнительные данные на контроллер.
Я хотел бы отправить содержимое данных, а также QueryString, которые могут содержать любое количество и типы пар ключ/значение для контроллера. Я могу извлечь эти пары ключ/значение на сервере, так как я не могу создать для них объект в сигнатуре метода. Однако это не работает должным образом.
JQuery:
function PostForm() {
$.ajax({
url: "/Home/TestMVC",
type: "POST",
dataType: "application/JSON",
data:
{
Obj: $('#form').serialize(),
TheWeirdQueryString: $('.additionalParams').serialize(),
}
});
};
Действие:
public void TestMVC(MyObject obj, String TheWeirdQueryString)
{
//Obj now does NOT contain the element, it is NULL. Whereas TheWeirdQueryString works fine.
}
Сообщение:
Obj: name=bob&age=999&sex="unknown"
TheWeirdQueryString: param1=1¶m2=2
Я думаю, это потому, что я на самом деле создал объект JSON в качестве данных и установить свойства к имени объекта.
Существует разница в значениях POST, которые отображаются в Firebug. Когда я отправляю объект самостоятельно, значения POST являются всеми ключами объекта/формы с их соответствующими значениями. Во втором примере есть два простых свойства: имя, которое я им дал, каждый из которых содержит QueryString (Foo=1&Bar=2
) и MVC, не может сопоставить QueryString с членами объекта (или так оно и появилось).
Есть ли вообще вообще работа, как в первом случае, но и для отправки дополнительных данных во второй аргумент в действии? Я предполагаю, что это добавить дополнительное свойство ко всем существующим, созданным, когда jquery выполняет сериализацию формы.
POST-я на самом деле хочу это:
Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1¶m2=2
Вы можете разместить значения POST вы видите для обоих сценариев? Я не совсем понимаю ваше описание. –
Готово. Последний пример - это сообщение, которое я пытаюсь сделать. – Damien