Реализация функциональности поиска MVC - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть форма, где пользователи могут вводить информацию для поиска записей. У меня есть ViewModel, созданная для передачи пользовательских входов в контроллер.

Вот ViewModel

 public class SearchParameters
{
    [DisplayName("First Name:  ")]
    public string FirstName { get; set; }
    [DisplayName("Last Name:  ")]
    public string LastName { get; set; }
    [DisplayName("Alternate Name:  ")]
    public string AltName { get; set; }
    [DataType(DataType.Date)]
    [DisplayName("Date of Record:  ")]
    public DateTime? DateOfRecord { get; set; }
    [DisplayName("County:  ")]
    public string County { get; set; }
}

Это форма для получения пользовательских данных

@model GenDB.ViewModels.SearchParameters
@using (Html.BeginForm("Search", "Home"))
{
    @Html.LabelFor(m => m.FirstName)
    @Html.TextBoxFor(m => m.FirstName)
    <br />
    <br />
    @Html.LabelFor(m => m.LastName)
    @Html.TextBoxFor(m => m.LastName)
    <br />
    <br />
    @Html.LabelFor(m => m.AltName)
    @Html.TextBoxFor(m => m.AltName)
    <br />
    <br />
    @Html.LabelFor(m => m.DateOfRecord)
    @Html.TextBoxFor(m => m.DateOfRecord)
    <br />
    <br />
    @Html.LabelFor(m => m.County)
    @Html.TextBoxFor(m => m.County)
    <br />
    <br />
    <button type="reset">Clear All Fields</button>
    <button type="submit">Search</button>
}

Это вызовет метод поиска с домашнего контроллера. Мой метод поиска ниже.

public ActionResult Search(SearchParameters searchParam)
    {

        var business = new ObituaryBuisnessLogic();
        var model = business.Search(searchParam);
        return View(model.ToList());
    }

Мой класс бизнес-уровня с фактической реализацией ниже.

public class ObituaryBuisnessLogic
{
    private GenContext Context;
    public ObituaryBuisnessLogic()
    {
        Context = new GenContext();
    }

    public IEnumerable<Obit> Search(SearchParameters parameters)
    {
        var result = Context.Obit.AsQueryable();

        if (parameters != null)
        {

            if (!string.IsNullOrEmpty(parameters.FirstName))
            {
                result = result.Where(x => x.FirstName.Contains(parameters.FirstName));
            }
            if (!string.IsNullOrEmpty(parameters.LastName))
            {
                result = result.Where(x => x.LastName.Contains(parameters.LastName));
            }
            if (!string.IsNullOrEmpty(parameters.AltName))
            {
                result = result.Where(x => x.AltName.Contains(parameters.LastName));
            }
        }
        return result;
    }    
}

Моя цель - взять пользовательские входные данные из первой формы, поместить их в модель параметров поиска, затем я хочу запросить 3 отдельные таблицы, все со схожими, но разными структурами и моделями, и вернуть все результаты в представление. , с 3 частичными представлениями для соответствующих таблиц.

Моя путаница наступает, потому что я знаю, что мне нужно вызывать метод Search из контроллера Home, но как мне в таком случае разбивать контроллер таблиц друг на друга, чтобы запрашивать базу данных и возвращать результаты.

Мой мыслительный процесс такой.

ПАРАМЕТРЫ ВХОДА ПОЛЬЗОВАТЕЛЯ ----> СПОСОБ ПОИСКА ДОМАШНЕГО КОНТРОЛЛЕРА ВЫЗЫВАЕТСЯ ВХОДАМИ ПОЛЬЗОВАТЕЛЯ, ПЕРЕДАННЫМИ В ПАРАМАХ -----> (вот мое замешательство) ВЫЗЫВАЙТЕ ТРИ РАЗЛИЧНЫХ ИНДИВИДУАЛЬНЫХ КОНТРОЛЛЕРА «ПОИСК» МЕТОДОВ, ПОПУЛЯРНЫЙ МОДУЛЬ ИХ С РЕЗУЛЬТАТАМИ, ВОЗВРАТИТЕ РЕЗУЛЬТАТЫ К УЗНАЧИТЕЛЬНЫМ ВИДАМ ??? ....

Я думал о том, чтобы просто поместить всю логику в метод поиска Home Controller, но потом меня смущает, почему мне даже нужны контроллеры для трех других классов Model.

Спасибо, что уделили время на мой вопрос.

1 Ответ

0 голосов
/ 26 апреля 2018

Не уверен на 100%, правильно ли я понимаю ваш вопрос, но здесь идет речь. Оставьте одну команду в вашем контроллере.

На вашем бизнес-уровне вызовите методы поиска для каждого из БД (context.Obit, context.Obit2 и т. Д.).

Материализация ваших результатов в общую модель

obitResult = result.Select(i => new resultViewModel(i))

При желании можно вставить эти 3 результирующих объекта в модель представления контейнера для отображения в представлении

viewModel.ObitResults = obitResult
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...