我如何使用 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 点了解详情。
关于c# - MVC 中的 AJAX JSON 调用来过滤 View 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1494312/