2016-07-22 2 views
0

Я вызываю метод с именем Issues в Issues контроллером через ajax.Получить номер модели в ответе ajax return Partial View

var url = "@(Url.Action("Issues", "Issues"))"; 
$.ajax({ 
    type: 'POST', 
    url: url, 
    data: issue, 
    dataType: "html", 
    success: function (evt) { 
     $('#filteredDataList').html(evt); 
    }, 
}); 

И в мой контроллер:

[System.Web.Mvc.HttpPost] 
public ActionResult Issues(IssuesModel issue) 
{ 
    var model = allIssuesList.OrderBy(p => p.ID).ToList(); 
    return PartialView("~/Views/Issues/_LoadMoreIssues.cshtml", model.Take(20)); 
} 

Что мне нужно, это способ получить количество модели в ответ на успех вызова AJAX, так что я могу сделать следующее:

success: function (evt) { 
    $('#filteredDataList').html(evt); 
    var modelCount = ??? 
    if (modelCount > (20)) { 
     $("#loadMore").show().fadeIn(2000); 
    } 
},... 

Есть ли какой-либо возможный способ достичь этого?

+1

Почему в мире вы получаете все записи и материализуете их в память, когда хотите только 20. Удалите '.ToList() в запросе. В представлении '_LoadMoreIssues' добавьте скрытый ввод (скажем)'

ответ

3

Вы не возвращаете модель для вызова ajax, вы возвращаете html.

Вы можете включить любую информацию, которая вам нравится в html, и прочитать ее оттуда.

Во-первых, добавьте ViewModel, чтобы включить вашу дополнительную информацию:

public class MoreIssuesViewModel 
{ 
    public IList<Order> Orders { get;set; } 
    public int Total { get;set; } 
} 

Используйте это от контроллера:

[System.Web.Mvc.HttpPost] 
public ActionResult Issues(IssuesModel issue) 
{ 
    var data = allIssuesList.OrderBy(p => p.ID).ToList() 
    var model = new MoreIssuesViewModel 
    { 
     Orders = data.Take(20), 
     Total = Orders.Count() 
    } 
    return PartialView("~/Views/Issues/_LoadMoreIssues.cshtml", model); 
} 

Затем на ваш взгляд, хранить новую информацию где-то (пример)

@model MoreIssuesViewModel 
<table data-total='@Model.Total'> 
    <tbody>  
     @foreach(var order in Model.Orders) { 
     <td>....</td> 
     } 

Затем вы можете прочитать это из success

success: function (evt) { 
    $('#filteredDataList').html(evt); 
    var modelCount = $('#filteredDataList table').data("total") 
    if (modelCount > (20)) { 
     $("#loadMore").show().fadeIn(2000); 
    } 
},... 
+0

Я получение неопределенного значения для modelCount в 'window.alert (" model count: "+ modelCount);' – Hanady

+0

Ну, все зависит от того, как вы создаете свой частичный вид, который вы не задали в вопросе. необходимо * адаптировать общие принципы, приведенные здесь *, в соответствии с вашим конкретным сценарием. См. комментарий @StephenMuecke для альтернативного метода передачи деталей (в скрытом вводе) - но тот же самый принцип применяется –

+0

Жаль, что это было плохо. что-то не хватает. Теперь он работает как ожидалось. спасибо :) – Hanady