c# - MVC 中的 AJAX JSON 调用来过滤 View 中的列表

标签 c# asp.net-mvc ajax model-view-controller json

我如何使用 Ajax 对 MVC 中的 ListView 进行过滤。

场景:

列出所有新闻项目。左侧是类别过滤器列表。检查要显示的类别,然后单击过滤器按钮(或者当您选中和取消选中它时,它会执行过滤器?) 过滤新故事列表。

这是我用于迭代列表中的项目的 View 代码。

<% foreach (var item in Model)
 { %>
    <div class="newsPreviewContainer">
      <div class="newsTitle">
        <%= Html.ActionLink(Html.Encode(item.Title), "Details", 
                               new { id= item.NewsPostID })%></div>
      <div class="newsBody">
          <%= Html.NewsPreviewBody(item.Body, 250) %></div>
      <div class="newsDate">
          <%= Html.Encode(String.Format("{0:g}", item.DateUpdated)) %></div>
      </div>
  <% } %>

我创建了一个部分 View ,其中列出了每个新闻项目可以所属的类别... 现在它有一个提交按钮,该按钮调用一个操作,它使用表单集合来确定检查哪些项目。然后,它获取该列表,并执行 linq 查询来获取新列表,将检查的值与新闻报道类别值进行比较。我将列表返回到 View ,并使用新结果集重新发布页面。这 实际上一切都有效。我只是想通过 AJAX 尝试一下。这样复选框就不会重置。我会列出在没有提交按钮的情况下实际完成这项工作,基本上当用户选中和取消选中一个类别时,它会分别执行 AJAX 调用来过滤。

这是我从部分 View 提交过滤器按钮时的操作...

[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Index(FormCollection fVals)
{
    var q = from x in fVals.AllKeys
            where fVals[x] != "false"
            select x;
    var ids = q.ToList();

    var list = this.newsService.GetNewsPostByGroup(ids);

    return View(list);
}

请提出想法和建议,当您阅读本文时我正在努力,但我希望您能提供任何帮助。

非常感谢!

最佳答案

首先,如果请求是通过 AJAX 调用发出的,您可能希望能够仅返回部分 View 。这可以很容易地完成:

if (Request.IsAjaxRequest())
{
    return PartialView("NewsList", list);
} else {
    return View(list);
}

或者,在一行中做同样的事情:

return (Request.IsAjaxRequest() ? PartialView("NewsList", list) : View(list));

为了使您的操作方法保持可测试性,而不必模拟 HttpContext,您可以将 bool 值作为输入参数,并用属性填充。请参阅 this excellent blog post 中的第 7 点了解详情。

此外,为了在客户端执行 AJAX 调用,您可能需要使用 jQuery 。他们的AJAX API向后踢=)

关于c# - MVC 中的 AJAX JSON 调用来过滤 View 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1494312/

相关文章:

c# - 将错误消息作为异常处理

asp.net-mvc - 使用 Entity Framework 4.1 执行更新/插入存储过程?

php - 如何更改数据库更新中的元素

javascript - 如何(某种程度上)向 fullcalendar 的 renderEvents 处理程序添加代码?

javascript - 如何使用 jQuery 检查切换隐藏状态

c# - 无需 SAS token 即可访问存储在 Azure 文件存储中的文件

C#:从 DataTable 中检索前 n 条记录

c# - 如何在 C# 中使用 linq 获取多级深度订单项?

javascript - 使用 jQuery 将数据发布到 MVC 操作方法

asp.net-mvc - 使用 NHibernate 子集合自动映射对象