2016-12-14 3 views
2

Каждое решение/аналогичный вопрос относится к объектам json. Я думаю, проблема может быть вызвана использованием html. Я также подтвердил, что данные не пустые, прежде чем они попадут в вызов ajax.MVC: данные Ajax не доходят до контроллера

Вот Ajax

function SubmitSearch() { 
    var type = $("#select_SearchType").val() 
    var query = $("#input_Search").val() 

    $.ajax({ 
     //url: "newSearch", 
     url: '@Url.Action("newSearch", "Results")', 
     type: 'POST', 
     cache: false, 
     dataType: "html", 
     contentType: 'application/html; charset=utf-8', 
     data: { type: type, query: query }, 
     success: function (ViewModel) { 
      alert(ViewModel) 
      $("#div_record").empty(); 
      $("#div_record").html(ViewModel) 
     }, 
     error: function (ViewModel) { 
      alert("error") 
      $("#div_record").empty(); 
      $("#div_record").html(ViewModel) 
     }, 
    }); 
} 

И выбранный код из действий

[HttpPost] 
    public ActionResult newSearch(string type, string query) 
    { 
     switch (type) 
     { 
      case " ": 
       response.errMess = "empty data, T:" + type + " Q:" + query; 
       return PartialView("Record", response); 
      default: 
       response.errMess = "Error: mismatched fields, T:" + type + " Q:" + query; 
       return PartialView("Record", response); 
     } 

типа и запроса оба приходят в пустой

+0

Почему ваш 'CONTENTTYPE:«приложение/html; charset = utf-8'', когда вы отправляете 'application/x-www-form-urlencoded'? Если вы ожидаете HTML в * ответе *, 'dataType: 'html'' должно быть достаточно. 'contentType' используется * request *. – haim770

+0

Я понял, что это будет правильно, так как тип объектов, которые я отправляю, это просто текстовые строки –

+0

Спасибо, сработало! –

ответ

2

Вам не нужно использовать contentType: 'application/html; charset=utf-8'. Есть несколько методов.

Во-первых, вы должны использовать что-то вроде этого (поместить параметры непосредственно в url):

$.ajax({ 
    //url: "newSearch", 
    url: '@Url.Action("newSearch", "Results")?type='+type+'&query='+query, 
    type: 'POST', 
    success: function (ViewModel) { 
     alert(ViewModel) 
     $("#div_record").empty(); 
     $("#div_record").html(ViewModel) 
    }, 
    error: function (ViewModel) { 
     alert("error") 
     $("#div_record").empty(); 
     $("#div_record").html(ViewModel) 
    }, 
}); 

Второй. Вы должны сохранить некоторые данные на сервере, используя свойство data.

Если вы хотите вернуть PartialView, нет необходимости использовать dataType: "html"

Что-то вроде этого:

$.ajax({ 
    //url: "newSearch", 
    url: '@Url.Action("newSearch", "Results")', 
    type: 'POST', 
    cache: false, 
    data: { type: type, query: query }, 
    success: function (ViewModel) { 
     alert(ViewModel) 
     $("#div_record").empty(); 
     $("#div_record").html(ViewModel) 
    }, 
    error: function (ViewModel) { 
     alert("error") 
     $("#div_record").empty(); 
     $("#div_record").html(ViewModel) 
    }, 
}); 
+0

Поскольку действие возвращает 'PartialView', OP по праву ожидает возврата HTML. Использование 'dataType: 'json'' предотвратит это. – haim770

+0

Да, вы правы. Благодарю. Я не вижу, чтобы этот метод возвращал 'partialView'. –

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