首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC搜索功能实现

MVC搜索功能实现
EN

Stack Overflow用户
提问于 2018-04-27 02:34:22
回答 1查看 47关注 0票数 0

我有一个表单,用户可以输入信息来搜索记录。我创建了一个ViewModel来将用户输入传递给控制器。

这是ViewModel

代码语言:javascript
复制
 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; }
}

这是获取用户数据的表单

代码语言:javascript
复制
@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>
}

这将从主控制器调用search方法。下面是我的搜索方法。

代码语言:javascript
复制
public ActionResult Search(SearchParameters searchParam)
    {

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

我的业务层类和下面的实际实现。

代码语言:javascript
复制
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的搜索方法中,但这让我感到困惑,为什么我甚至需要其他三个Model类的控制器。

感谢你花时间看我的问题。

EN

回答 1

Stack Overflow用户

发布于 2018-04-27 04:59:42

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

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

将结果物化到共享模型中

代码语言:javascript
复制
obitResult = result.Select(i => new resultViewModel(i))

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

代码语言:javascript
复制
viewModel.ObitResults = obitResult
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50049852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档