1

我有一个模型类,其中包含

public string FirstName { get; set; }
public string LastName { get; set; }

控制器中我有

 public ActionResult Index(string search)
        {
            ViewBag.Message = "Your contacts.";

            var model = _db.Contacts
                        .OrderBy(c => c.FirstName)
                        .Where(c => search == null || c.FirstName.StartsWith(search) || c.LastName.StartsWith(search))
                        .Take(5)
                        .Select(c => new ContactsListViewModel
                        {
                            ContactId = c.ContactId,
                            FirstName = c.FirstName,
                            LastName = c.LastName,
                            Address = c.Address,
                            City = c.City,
                            Phone = c.Phone,
                            Email = c.Email

                        });



            if (Request.IsAjaxRequest())
            {
                return PartialView("_Contacts", model);
            }

            return View(model);
        }

到目前为止,我设法分别按名字和姓氏进行搜索。例如,如果我输入 John,我会很好地获得与 John 相关的所有信息。与姓氏相同。所以我有一个问题,我如何实现搜索功能,以便用户可以在一个输入表单中输入例如名字和姓氏,并且会出现相关表格?

非常感谢帮助。谢谢

谢谢,Raphaël Althaus 的回答。但我已经有一个搜索表单在我看来

<form method="get" action="@Url.Action("Index")"
    data-otf-ajax="true" data-otf-target="#contactList">
    <input type="search" name="search" data-otf-autocomplete="@Url.Action("Autocomplete", "Contacts")" />
    <button type="submit" class="btn">Search</button>
</form>

看来,您提供的是在单独的文本框中搜索名字和姓氏。但我想在一个搜索表单中输入例如 John Doe 并获取与该人相关的表格。我已经有一个带有表格的部分视图,只有当我分别输入名字和姓氏时才会显示信息。

4

3 回答 3

4

您可以SearchClass在视图中使用一个类,该类还包含一个FirstName和一个LastName属性,并将其包含在一个表单中。

@model SearchClass

@using(Html.BeginForm()) {
  @Html.LabelFor(m => m.FirstName)
  @Html.TextBoxFor(m => m.FirstName)

 @Html.LabelFor(m => m.LastName)
 @Html.TextBoxFor(m => m.LastName)
 <input type="submit" value = "search" />
}

然后

[HttpPost]
public ActionResult Index(SearchClass search) {
   IQueryable<Contact> model = _db.Contacts.AsQueryable();
   if (!string.IsNullOrWhiteSpace(search.FirstName))
       model = model.Where(m => m.FirstName.StartsWith(search.FirstName));

   if (!string.IsNullOrWhiteSpace(search.LastName))
       model = model.Where(m => m.LastName.StartsWith(search.LastName));

   var result = model
            .OrderBy(c => c.FirstName)
            .Take(5)
            //etc.

}
于 2013-05-22T21:52:41.087 回答
2

如果您使用的是 Linq-to-entities,您可以使用String.Concat来连接实体的字段。

var searchResult = DbContext.Users
                        .Where(u => String.Concat(u.FirstName, " ", u.LastName)
                        .Contains(searchTerm));
于 2013-08-13T00:07:24.167 回答
1

我认为您的 linq 查询有一些类似的变化。

在我的项目中,我正在使用这种方式:

var data1 = (from con in dbData.tblPresenters
                             let FillName = con.PresenterFirstName + " " + con.PresenterLastName
                             where FillName.ToLower().Trim().Contains(txtName.Text.Trim().ToLower()) 
                             select new
                             {                                    
                                 FirstName = con.PresenterFirstName,
                                 LastName = con.PresenterLastName,

                             }).ToList();

可能这会帮助你!

于 2013-05-23T06:00:09.227 回答