ASP.NET MVC: поиск в форме ввода данных - PullRequest
4 голосов
/ 06 мая 2009

и спасибо за чтение.

Я создаю форму ввода данных. Я пытаюсь найти способ позволить пользователю предоставить критерии (например, фамилию), выполнить поиск в таблице сотрудников для всех сотрудников, которые соответствуют критериям, отобразить результат таким образом, чтобы он мог выбрать правильного сотрудника и передать идентификатор этого сотрудника обратно в форму ввода данных, чтобы они могли заполнить запись и сохранить ее.

Спасибо

Ответы [ 3 ]

4 голосов
/ 06 мая 2009

Один из способов сделать это - использовать плагин jQuery autocomplete . В вашей форме есть текстовое поле для поиска и скрытое поле для хранения идентификатора. Используйте автозаполнение через AJAX, чтобы получить список пар имя / идентификатор, возвращаемых как JSON, на основе критериев поиска. Настройте автозаполнение для принудительного выбора из списка, что запретит любой несоответствующий текст в поле. Когда пользователь выбирает элемент из списка, функция результата сохраняет связанный идентификатор в скрытом поле. Используйте скрытое поле в форме сообщения, чтобы получить идентификатор сотрудника.

Это может выглядеть примерно так:

View

$('#searchBox').autocomplete( '/Employees/Search', {
    dataType: 'json',
    max: 25,
    minChars: 2,
    cacheLength: 1,
    mustMatch: true,
    formatItem: function(data,i,max,value) {
        return value;
    },
    parse: function(data) {
        var array = new Array();
        for (var i=0; i < data.length; i++) {
            var datum = data[i];
            var display = datum.FirstName + ' ' + datum.LastName;
            array[array.length] = { data: datum, value: display, result: display };
        }
    }
});

$('#searchBox').result( function(event, data, formatted) {
    if (data) {
       $('#employeeID').val( data.EmployeeID );
    }
});

$('form').submit( function() {
    if (!$('#employeeID').val()) {
       alert( 'You must select an employee before clicking submit!' );
       return false;
    }
});


<input type='text' id='searchBox' />
<input type='hidden' id='employeeID' name='employeeID' />

Контроллер:

public ActionResult Search( string q, int limit )
{
    var query = db.Employees.Where( e => e.LastName.StartsWith( q ) )
                            .OrderBy( e => e.LastName )
                            .Select( e => new
                                 {
                                     FirstName = e.FirstName,
                                     LastName = e.LastName,
                                     EmployeeID = e.EmployeeID
                             });
    if (limit > 0)
    {
        query = query.Take(limit);
    }

    return Json( query.ToList() );
}

public ActionResult SomeAction( int employeeID, ... )
{
   ...
}
0 голосов
/ 06 мая 2009

Как-то так в контроллере для поиска в базе (используя linq)?

public ActionResult searchEmployees(string searchString) {
        var employees = (from e in db.Employees
                               where e.Name.Contains(searchString)
                               orderby e.Name
                               select e);
        return view("SearchResult", employees);
}

РЕДАКТИРОВАТЬ: Просто прочитайте ваши комментарии, и если я правильно понимаю, вас интересуют только идентификаторы. Используете ли вы их в javascript, и это какой-то вызов ajax? В этом случае вы можете захотеть вернуть массив или строку csv и обработать идентификаторы в вызове javascript.

0 голосов
/ 06 мая 2009

Я предлагаю использовать Linq.

Рассмотрим пример блога Скотта Гу ........

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

public static void GetEmployeeIDByLastName(string lastName)
{

DataContext dc = new DataContext();

var queryResult = from q in dc.Employee
            where q.EmployeeLastName.Equals(lastName)
            select new {
                EmployeeID = q.EmployeeID
                      }

foreach(var empID in queryResult)
        {
             //pass the empID value back to the display
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...