2013-09-04 2 views
0

У меня есть эта непонятная и довольно глупая проблема.ajax posting с частичного представления на контроллер 0:

У меня есть слабо типизированный частичный вид в моем приложении MVC4. На этом у меня есть кнопка

<input type="button" class="btn btn-primary btn-lg" value="Find" id="fej-find" /> 

Я посылаю АЯКС вызова JQuery из моего контроллера к нему, как этот

//searchedJob.Num = $("#fej-JobNumber").val(); 
//var DTO = { searchedJob: searchedJob }; 
var DTO = { searchedJobNumber: $("#fej-JobNumber").val() }; 
$.ajax({ 
    data: JSON.stringify(DTO), 
    type: 'POST', 
    url: '@Url.Action("SearchJobs", "Jobs")', 
    success: function (msg) { 
     return alert(msg); 
    } 
}); 

Firebug показывает мне это

enter image description here

Но когда я отладки , мой контроллер показывает это.

enter image description here

Что-то очень неправильно с моим кодом. Что это может быть?

ответ

2

Вам не нужно JSON.stringify ничего. Просто передать значение в параметре data с тем же ключом, как ваше имя параметра действия (searchedNumber):

$.ajax({ 
    url: '@Url.Action("SearchJobs", "Jobs")', 
    type: 'POST', 
    data: { searchedNumber: $("#fej-JobNumber").val() }, 
    success: function (msg) { 
     alert(msg); 
    } 
}); 

Также обратите внимание, что вы не должны возвращаться любое значение из success обратного вызова.

Вы можете использовать JSON, если хотите отправить на сервер большие и более сложные полезные нагрузки, например, целые модели. Например, давайте предположим, что у вас есть следующий вид модели:

public class MyViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public IEnumerable<string> Tags { get; set; } 
} 

который ваше действие контроллер принимает в качестве параметра:

[HttpPost] 
public ActionResult SomeAction(MyViewModel model) 
{ 
    ... 
} 

Теперь вы можете отправить его в формате JSON от клиента:

var model = { 
    id: 5, 
    name: $('#some_input_field').val(), 
    tags: [ "tag1", "tag2", "tag3" ] 
}; 
$.ajax({ 
    url: '@Url.Action("SomeController", "SomeAction")', 
    data: JSON.stringify(model), 
    contentType: 'application/json', 
    success: function(result) { 
     alert(result); 
    } 
}); 

Обратите внимание, что в этом случае вам необходимо установить правильный заголовок запроса Content-Type на application/json, чтобы стандартное связующее устройство на сервере могло автоматически инициализировать полезную нагрузку тела запроса к соответствующей модели представления.

+0

О, я отправляю как сам объект и строгу только данные? Я делал это в веб-формах таким образом http://encosia.com/using-complex-types-to-make-calling-services-less-complex/ – naveen

+0

Фактически я прокомментировал большую часть. Я отправляю объект на самом деле – naveen

+0

В этом случае посмотрите на вторую часть моего ответа, в которой я иллюстрирую, как это сделать. –

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