I can not implement a search with a drop-down list for all data in the table, I need help in solving this problem. Now gives a list, only with the field manager. If I drive a company, I’m also listed in the list, also a manager from this company. It turns out the main field manager?

Auto Search Job

The controller looks like this.

public ActionResult AutocompleteSearch(string term) { var a_suppliers = db.Ue_suppliers.Where( a => a.ShortName.Contains(term) || a.Manager.Contains(term) || a.Name.Contains(term) || a.PhoneManager.Contains(term) || a.Phone.Contains(term) ).ToList().Select( a => new { value = a.Manager, a.Name, a.ShortName, a.PhoneManager, a.Phone } ).Distinct(); return Json(a_suppliers, JsonRequestBehavior.AllowGet); } 

Here is the view.

 <div class="row" style="padding-top:1em"> @Html.Partial("_LeftMenuUchet") <div class="col-lg-9 col-md-9 col-sm-8" role="main"> <div class="bs-docs-section"> <h1 class="page-header">Поставщики</h1> <div class="row"> @using (Ajax.BeginForm("Ue_Suppliers_Search", new AjaxOptions { UpdateTargetId = "results" })) { <div class="col-sm-8"> <div class="input-group" style="display:flex !important"> <input type="text" name="name" data-autocomplete-source="@Url.Action("AutocompleteSearch", "Uchet")" class="form-control" placeholder="Поиск по поставщикам" /> <span class="input-group-btn"> <button class="btn btn-default" type="submit">Искать</button> </span> </div> </div> } <div class="pull-right col-lg-1"> <a class="btn btn-success" data-modal="" href="/Uchet/Create_Ue_Suppliers" id="btnCreate"> <span class="glyphicon glyphicon-plus"></span> </a> </div> </div> <div class="row" style="margin-top:2em" > <div class='contacts' id="results"> @Html.Partial("_Suppliers_Content") </div> </div> </div> </div> </div> <!-- modal placeholder--> <div id='myModal' class='modal fade in'> <div class="modal-dialog"> <div class="modal-content"> <div id='myModalContent'></div> </div> </div> </div> @section scripts{ @Scripts.Render("~/scripts/Appjs/UeType.js") <script> $(function () { $("[data-autocomplete-source]").each(function () { var target = $(this); target.autocomplete({ source: target.attr("data-autocomplete-source") }); }); }); </script> } 

I need that when dialing a number, a number would fall out, when dialing the company name, the company name would drop out and so on. but now it works, only by managers.

  • as an idea: var a_suppliers = db.Ue_suppliers.Select (a => new {value = a.Name.Contains (term)? a.Name: null}); - Sergey Tambovtsy

1 answer 1

It is necessary to combine suitable values ​​from the columns in which the search takes place into a single linear array of strings. Like that:

 public ActionResult AutocompleteSearch(string term) { var a_suppliers = db.Ue_suppliers .Where(a => a.ShortName.Contains(term)) .Select(a => a.ShortName); a_suppliers = a_suppliers.Union( db.Ue_suppliers .Where(a => a.Manager.Contains(term)) .Select(a => a.Manager)); a_suppliers = a_suppliers.Union( db.Ue_suppliers .Where(a => a.Name.Contains(term)) .Select(a => a.Name)); a_suppliers = a_suppliers.Union( db.Ue_suppliers .Where(a => a.PhoneManager.Contains(term)) .Select(a => a.PhoneManager)); a_suppliers = a_suppliers.Union( db.Ue_suppliers .Where(a => a.Phone.Contains(term)) .Select(a => a.Phone)); return Json(a_suppliers.ToArray(), JsonRequestBehavior.AllowGet); } 
  • Everything is working! Thank! - shatoidil