获取返回部分视图的ajax响应中的模型计数

时间:2016-07-22 09:21:41

标签: jquery ajax asp.net-mvc

我通过ajax在Issues控制器中调用名为Issues的方法。

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 个答案:

答案 0 :(得分: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);
    }
},...