Частичное представление игнорирует набор данных и не отображает

Я занимаюсь разработкой приложения в ASP.NET MVC. Я работаю над страницей, которая принимает некоторые введенные пользователем значения, а затем получает набор данных из них с помощью хранимой процедуры. Я предпочитаю, чтобы данные вводились на той же странице, на которой они отображаются, поэтому для этого я использую AJAX и частичные представления. Мой код отлично работал с фиктивным набором простых данных (простая строка), но теперь, когда я использую более сложный набор данных (Ienumerable), он больше не отображает частичное представление.

Вот часть моего представления (текстовые поля, в которые вводятся данные, скрыты для целей длины):

<!--SEARCH RESULTS PARTIAL FILLED BELOW-->
<div id="search-results">

</div>
<!---->


<script>
    function getSearchResults() {

        var SqlViewModel = {
           //assign textboxes to values to pass to controller (hidden)
        }

        $.ajax({
            type: "POST",
            data: JSON.stringify(SqlViewModel),
            dataType: "json",
            contentType: "application/json",
            url: "/Sql/Search/",
            success: function(result) {
                $('#search-results').html(result);
            }
        });        }


</script>

Я собираю данные из текстовых полей, а затем передаю эти значения моему методу "Search", используя мой ajax. (все значения передаются правильно, используя SqlVieWModel)

Контроллер метод:

[HttpPost]
    public ActionResult Search(SqlViewModel sT)
    {
             //code for stored procedure

        var sql = //get stored procedure and parameters         

        SqlPartialViewModel obj = new SqlPartialViewModel();
        obj.SqlData = sql; //obj.SqlData is of type IEnumerable<Get_Result>

        return PartialView("_SearchResultsPartial", obj);

Определение SqlPartialViewModel:

 public class SqlPartialViewModel
{
    public IEnumerable<Get_Result> SqlData { get; set; }
}

Наконец, я пытаюсь просто заставить эти данные отображаться в моем частичном представлении (_SearchResultssPartial.cshtml):

 @model SqlPartialViewModel

<table>
<tr>
   <th>//Display stuff</th>

</tr>
@foreach(var result in Model.SqlData)
{ 
<tr>
  <td>//Display stuff</td>
</tr>
}

Ничего не отображается, и я не получаю ошибок.

1 ответ

Решение

В твоем Ajax звонке, ты ожидаешь json результат с сервера:

$.ajax({
        type: "POST",
        data: JSON.stringify(SqlViewModel),
        dataType: "json", <---- HERE
        contentType: "application/json", 
        url: "/Sql/Search/",
        success: function(result) {
            $('#search-results').html(result);
        }
});

Но когда вы возвращаете PartialView из ActionResultвозвращаешься html тип, не jsonтип.

Просто измените dataType в "html" или удалите эту строку (поэтому javascript будет пытаться интерпретировать сам).

Другие вопросы по тегам