【问题标题】:MVC Search Functionality ImplementationMVC 搜索功能实现
【发布时间】:2018-04-26 18:34:21
【问题描述】:

我有一个表单,用户可以在其中输入信息来搜索记录。我创建了一个 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 个部分视图。

我的困惑来了,因为我知道我需要从 Home 控制器调用 Search 方法,但是我如何中断到其他表控制器来查询数据库并返回结果。

我的思考过程是这样的。

用户输入参数---->使用作为参数传入的用户输入调用家庭控制器的搜索方法----->(这是我的困惑)调用三种不同的个人控制器“搜索”方法,填充它们各自的模型有了结果,将结果返回给各自的视图???....

我曾想过将所有逻辑都放在 Home Controller Search 方法中,但是这让我感到困惑,为什么我什至需要其他三个模型类的控制器。

感谢您花时间查看我的问题。

【问题讨论】:

  • 不是 100% 确定我是否理解您的问题,但这里有。将单个命令留在控制器中。在您的业务层中,针对每个 db(context.Obit、context.Obit2 等)调用搜索方法。将结果具体化为共享模型 (obitResult = result.Select(i => new resultViewModel(i))。或者,将这 3 个结果对象粘贴到容器视图模型中以显示在视图上 (viewModel.ObitResults = obitResult)跨度>
  • @Jonathan - 你应该把它作为答案 - 首先是因为它是正确的,其次因为它不是评论。 :-)
  • 原来的问题太含糊了,不过,我犹豫了……但你可能是对的 :)

标签: c# asp.net-mvc linq


【解决方案1】:

不是 100% 确定我是否理解您的问题,但这里是。将单个命令留在控制器中。

在您的业务层中,针对每个 db(context.Obit、context.Obit2 等)调用搜索方法。

将您的结果具体化为共享模型

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

或者,将这 3 个结果对象粘贴到容器视图模型中以显示在视图上

viewModel.ObitResults = obitResult

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2011-11-05
    • 2019-02-20
    • 2021-01-08
    • 2019-02-13
    相关资源
    最近更新 更多