Частичное представление игнорирует набор данных и не отображает
Я занимаюсь разработкой приложения в 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 будет пытаться интерпретировать сам).