FootlooseFS.Web.AdminUI.Controllers.PersonController.Search C# (CSharp) Метод

Search() приватный Метод

private Search ( FootlooseFS.Models.SearchParameters searchParameters ) : System.Web.Mvc.ActionResult
searchParameters FootlooseFS.Models.SearchParameters
Результат System.Web.Mvc.ActionResult
        public ActionResult Search(SearchParameters searchParameters)
        {
            // Serialize sort direction to an enum of SortDirection
            SortDirection sortDirection = SortDirection.Ascending;
            Enum.TryParse<SortDirection>(searchParameters.SortDirection, out sortDirection);

            var searchCriteria = new PersonDocument();

            if (searchParameters.SearchCriteria != null && searchParameters.SearchCriteria.Count() > 0)
            {
                foreach (var searchCriterion in searchParameters.SearchCriteria)
                {
                    if (!string.IsNullOrEmpty(searchCriterion.Value))
                    {
                        if (searchCriterion.Key == "PersonID")
                            searchCriteria.PersonID = Int32.Parse(searchCriterion.Value);
                        else if (searchCriterion.Key == "FirstName")
                            searchCriteria.FirstName = searchCriterion.Value;
                        else if (searchCriterion.Key == "LastName")
                            searchCriteria.LastName = searchCriterion.Value;
                        else if (searchCriterion.Key == "PhoneNumber")
                            searchCriteria.PhoneNumber = searchCriterion.Value;
                        else if (searchCriterion.Key == "StreetAddress")
                            searchCriteria.StreetAddress = searchCriterion.Value;
                        else if (searchCriterion.Key == "City")
                            searchCriteria.City = searchCriterion.Value;
                        else if (searchCriterion.Key == "Zip")
                            searchCriteria.Zip = searchCriterion.Value;
                        else if (searchCriterion.Key == "State")
                            searchCriteria.State = searchCriterion.Value;
                        else if (searchCriterion.Key == "EmailAddress")
                            searchCriteria.EmailAddress = searchCriterion.Value;
                    }
                }
            }

            var personsPage = personService.SearchPersons(searchParameters.PageNumber, searchParameters.NumberRecordsPerPage, searchParameters.SortColumn, sortDirection, searchCriteria);

            var pageOfListPersonDocuments = new PageOfList<PersonDocument>(personsPage.Data, searchParameters.PageNumber, searchParameters.NumberRecordsPerPage, personsPage.TotalItemCount);
            pageOfListPersonDocuments.SearchCriteria = searchParameters.SearchCriteria;

            return PartialView(pageOfListPersonDocuments);
        }

Usage Example

        public void TestPersonSearch()
        {
            PersonController personController = new PersonController(mockPersonService.Object);

            SearchParameters searchParameters = new SearchParameters();
            searchParameters.NumberRecordsPerPage = pageSize;
            searchParameters.PageNumber = pageIndex;
            searchParameters.SortColumn = "PersonID";
            searchParameters.SortDirection = "ASC";
            searchParameters.SearchCriteria = new Dictionary<string, string>();
            ActionResult result = personController.Search(searchParameters);

            // Verify that the result is of type PartialViewResult
            Assert.IsInstanceOf<PartialViewResult>(result);

            var partialViewResult = result as PartialViewResult;

            // Verify that the model of the result is PageOfList<PersonDocument>
            Assert.IsInstanceOf<PageOfList<PersonDocument>>(partialViewResult.Model);

            var personPage = partialViewResult.Model as PageOfList<PersonDocument>;

            // Verify that the same number of object provided by the service search method are returned by the controller
            Assert.AreEqual(personPage.Data.Count, 10);
        }