Если вы сериализуете форму с помощью чего-то вроде jQuery, он часто сопоставляет ключи и значения JSON со свойствами объекта в действии контроллера, в которое вы отправляете сообщения. Так:
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
}
ПОЧТА:
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