【问题标题】:Filter card list with Razor View使用 Razor 视图过滤卡片列表
【发布时间】:2018-04-30 10:53:27
【问题描述】:

当你使用时,我试图像在 AngularJS 中一样制作过滤器:

ng-repeat="u in users | filter:searchBar">

你的输入过滤器看起来像

<input type="text" id="searchBar" placeholder="start typing" ng-model="searchBar">

但是我正在使用 Razor View 在 MVC 上工作,我不知道如何处理这个过滤器。

卡片列表是用这样的 foreach 制作的:

@foreach{ var item in Models){
<div class="card">
  <div class="card-container">
    some content
  </div>

</div>

}

有什么想法吗?

【问题讨论】:

  • 所以你想用 angular 来完成这个?
  • Nono,我说我正在使用 Razor View 开发 MVC,但我需要类似 angular 的功能或任何可以完成工作的功能。
  • @ErikPhilips 忘了给你加标签
  • 您可以使用 ajax 进行搜索。 Models 是什么?你的观点是强类型的?
  • @Shyju Models 是 MVC 的一个 Model,只是写的快,让问题更简单;我的观点被 trongly 输入到 IEnumerable。我考虑过 ajax,但我希望前端(Razor View)来处理这个处理

标签: angularjs asp.net-mvc razor


【解决方案1】:

您可以使用 ajax 进行过滤。这是一个服务器端过滤解决方案。

首先,您应该将呈现结果的代码移动到局部视图。假设您创建了一个名为 CustomerList.cshtml 的局部视图。将列表代码移至该位置。

@model IEnumerable<Customer>
@foreach (var item in Model)
{
    <div class="card">
        <div class="card-container">
            @item.Name
        </div>
    </div>
}

现在在您的主视图中,您可以调用此局部视图并将数据传递给它。将对部分视图的调用包装在容器 div 中。添加输入元素供用户输入搜索键。假设你的主视图也被强类型化为IEnumerable&lt;Customer&gt;

@model IEnumerable<Customer>
<input type="text" id="search" data-url="@Url.Action("Index")" />
<div id="div-items">
    @Html.Partial("CustomerList",Model)
</div>

现在我们需要一些 javascript 代码来监听搜索输入上的 keyup 事件,读取它的值并对使用搜索键的服务器进行 ajax 调用并获取过滤后的数据集,将其传递给相同的局部视图并返回局部视图结果。

可以使用jQuery$.get方法

$(document).ready(function () {

    $("#search").keyup(function() {
        var v = $(this).val();

        $.get($(this).data("url"), { searchKey: v }).done(function(res) {
            $("#div-items").html(res);
        });
    });
});

现在确保您的服务器操作方法返回过滤后的数据,如下所示

public ActionResult Index(string serchKey="")
{
    var items = db.Customers.AsQueryable();
    if (!String.IsNullOrEmpty(searchKey))
    {
        items = items.Where(a => a.Name.StartsWith(searchKey));
    }
    var t = items.ToList();
    if (Request.IsAjaxRequest())
    {
        return PartialView("CustomerList",t );
    }
    return View(t);
}

另一种选择是进行客户端过滤。物品上。但是如果我朝着这个方向前进,我会选择像 angular 这样的客户端 MVC 框架来为我做这件事

【讨论】:

  • 我一直在寻找客户端解决方案,但考虑到我只能使用 Razor View,我将不得不选择解决服务器端的选项。
  • Razor 是服务器端。您在 razor 视图中的代码在服务器中执行,生成的 html 将被渲染。
  • 那么我可以毫无问题地使用 Razor 和 AngularJS 吗?因为我熟悉 Angular 但我对 MVC 很陌生,所以在客户端做一些事情会更好,比如这个过滤的东西。
  • 是的。在这种情况下,您的剃刀视图将是一个简单的占位符,它将具有角度所需的标记。然后您将获得角度 ng-repeat 指令(它是一个数组)所需的数据并使用它。
  • 很棒的@Shyju 然后我将尽快将 AngularJS 链接到我的项目。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多