2016-11-16 2 views
2

У меня есть действие в контроллере, как:Как отправить форму в виде объекта 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 не выполнимо.

Как это решить?

+0

Попробуйте это: 'данных: JSON.stringify ({ViewModel: объект, OldValue: oldVal})' –

+1

Вы можете использовать '$ .param() 'добавить дополнительные пары имя/значение в сериализованный объект - см. [этот ответ] (http://stackoverflow.com/questions/32353093/mvc-jquery-ajax-post-returns-null/32353268#32353268) –

+0

Я вместо этого использовал '.serializeArray()' и добавил новое поле. Это лучший вариант, если вам нужно отредактировать некоторые значения в сериализованной форме. –

ответ

0

Предполагая, что значение oldVal не является NULL. Вы можете попробовать это:

var object = $("#form").serialize(); 
$.ajax({ 
     url: '@Url.Action("Edit", "MyController")', 
     type: "POST",    
     contentType: application/json; charset=utf-8       // please see below    
     data: JSON.stringify{ viewModel: object, oldValue: oldVal}, 
     success: function (response) { 
       alert("Successfully updated!"); 
       } 
}); 
0

Добавить dataType: "JSON", перед тем data: { viewModel: object, oldValue: oldVal}

Смежные вопросы