现在,我们将实现搜索方法GetPeople。UI如下:
我们添加一个搜索输入框用来进行名单的筛选:
@using Abp.Web.Mvc.Extensions
@using MyCompanyName.AbpZeroTemplate.Web.Navigation
@using MyCompanyName.AbpZeroTemplate.Authorization
@model MyCompanyName.AbpZeroTemplate.Web.Areas.Mpa.Models.PhoneBook.IndexViewModel
@{
ViewBag.CurrentPageName = PageNames.App.Tenant.PhoneBook;
}
@section Scripts
{
@Html.IncludeScript("~/Areas/Mpa/Views/PhoneBook/_CreatePersonModal.js")
@Html.IncludeScript("~/Areas/Mpa/Views/PhoneBook/Index.js")
}
@section Styles
{
@Html.IncludeStyle("~/Areas/Mpa/Views/PhoneBook/Index.min.css")
}
<div class="row margin-bottom-5">
<div class="col-xs-6">
<div class="page-head">
<div class="page-title">
<h1>
<span>@L("PhoneBook")</span>
</h1>
</div>
</div>
</div>
<div class="col-xs-6 text-right">
@if (IsGranted(AppPermissions.Pages_Tenant_PhoneBook_CreatePerson))
{
<button id="CreateNewPersonButton" class="btn btn-primary blue">
<i class="fa fa-plus"></i>@L("CreateNewPerson")
</button>
}
</div>
</div>
<div class="portlet light">
<div class="portlet-title portlet-title-filter">
<h3>@L("AllPeople") (@Model.Items.Count)</h3>
<div class="inputs inputs-full-width">
<div class="portlet-input">
<form action="@Url.Action("Index")" method="get">
<div class="input-group">
<input id="FilterPeopleText" name="Filter" value="@Model.Filter" class="form-control" placeholder="@L("SearchWithThreeDot")" type="text" />
<span class="input-group-btn">
<button id="FilterPeopleButton" class="btn default" type="submit">
<i class="icon-magnifier"></i>
</button>
</span>
</div>
</form>
</div>
</div>
</div>
<div class="portlet-body">
<div id="AllPeopleList" class="list-group">
@foreach (var person in Model.Items)
{
<a href="javascript:;" class="list-group-item" data-person-id="@person.Id">
<h4 class="list-group-item-heading">
@person.Name @person.Surname
@if (IsGranted(AppPermissions.Pages_Tenant_PhoneBook_DeletePerson))
{
<button title="@L("Delete", person.Name)" class="btn btn-circle btn-icon-only red delete-person" href="javascript:;">
<i class="icon-trash"></i>
</button>
}
</h4>
<p class="list-group-item-text">
@person.EmailAddress
</p>
</a>
}
</div>
</div>
</div>
在IndexViewModel里添加Filter属性
[AutoMapFrom(typeof(ListResultDto<PersonListDto>))]
public class IndexViewModel : ListResultDto<PersonListDto>
{
public string Filter { get; set; }
public IndexViewModel(ListResultDto<PersonListDto> output, string filter = null)
{
output.MapTo(this);
Filter = filter;
}
}
最后,修改PhoneBookController的Index,将filter参数传递给IndexViewModel:
public ActionResult Index(GetPeopleInput input)
{
var output = this._personAppService.GetPeople(input);
var model = new IndexViewModel(output, input.Filter);
return View(model);
}
注意,PersonAppService的GetPeople方法在之前的实现中已经包含了input.Filter。