我有一个表单,用户可以输入信息来搜索记录。我创建了一个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个部分视图。
我的困惑即将到来,因为我知道我需要从Home控制器调用Search方法,但是我如何断开彼此的表控制器来查询数据库并返回结果。
我的思维过程是这样的。
用户输入参数----&gt;家庭控制器的搜索方法被称为参与通过的用户输入-----&gt; (这是我的困惑)调用三个不同的独立控制器“搜索”方法,按其结果对其各自的模型进行推广,将结果返回给各个观点...... ....
我想过把所有的逻辑都放在Home Controller Search方法中,但是后来为什么我甚至需要控制器来解决其他三个Model类。
感谢您抽出时间查看我的问题。
答案 0 :(得分:0)
如果我理解你的问题,不是100%肯定,但是这里有。将单个命令保留在控制器中。
在您的业务层中,针对每个dbs(context.Obit,context.Obit2等)调用搜索方法。
将结果具体化为共享模型
#button-container li {
display: inline-block;
border: 1px solid #000;
position: relative; /* add this */
}
(可选)将这3个结果对象粘贴到容器视图模型中以显示在视图
上obitResult = result.Select(i => new resultViewModel(i))