У меня есть действие в контроллере, как:Как отправить форму в виде объекта Model Model вместе с другими параметрами для контроллера в MVC?
public int Edit(MyViewModel viewModel)
{
// code to edit
}
И я отправляю форму, как:
$.post("/MyController/Edit", $("#form").serialize()).then(
function() {
$("#dialog1").dialog("close");
$("#list-grid").trigger('reloadGrid');
});
Это прекрасно работает. Я получаю параметр в том же формате, что и MyViewModel
.
Однако мне нужно передать еще один параметр в действие. Таким образом, я изменил контроллер для:
public int Edit(MyViewModel viewModel, string oldValue)
{
// code to edit
}
Теперь, я попытался следующим способом передать viewModel
вместе с oldValue
к действию с помощью Ajax вызова:
var object = $("#form").serialize();
$.ajax({
url: '@Url.Action("Edit", "MyController")',
type: "POST",
contentType: // please see below
data: { viewModel: object, oldValue: oldVal},
dataType: // please see below
contentType: 'application/json',
success: function (response) {
alert("Successfully updated!");
}
});
Хотя я могу получить значение oldValue
, viewModel
приходит как null
, хотя он точно такой же, как и отправленный в $.post(...)
, при осмотре в консоли.
Если я указать contentType
как любой из:
application/x-www-form-urlencoded; charset=UTF-8
или
application/json; charset=utf-8
или
application/json
вызов неудачен.
Я пробовал без указания dataType
, а также, указав его как json
, но напрасно.
Создание настраиваемого класса для де-сериализации отправленного json
не выполнимо.
Как это решить?
Попробуйте это: 'данных: JSON.stringify ({ViewModel: объект, OldValue: oldVal})' –
Вы можете использовать '$ .param() 'добавить дополнительные пары имя/значение в сериализованный объект - см. [этот ответ] (http://stackoverflow.com/questions/32353093/mvc-jquery-ajax-post-returns-null/32353268#32353268) –
Я вместо этого использовал '.serializeArray()' и добавил новое поле. Это лучший вариант, если вам нужно отредактировать некоторые значения в сериализованной форме. –