ASP.NET MVC:搜索数据输入表单

时间:2009-05-05 20:47:41

标签: asp.net-mvc

感谢阅读。

我正在构建一个数据输入表单。我试图找出让用户提供标准(例如姓氏)的方法,在员工表中搜索符合条件的所有员工,以他们可以选择正确员工的方式显示结果,并通过该员工的ID返回数据输入表单,以便他们完成记录并保存。

由于

3 个答案:

答案 0 :(得分:4)

执行此操作的一种方法是使用jQuery autocomplete插件。表单上有允许搜索的文本框和存储id的隐藏字段。通过AJAX使用自动完成功能,根据搜索条件获取以JSON形式返回的名称/ ID对列表。设置自动完成功能以强制从列表中进行选择 - 这将禁止字段中的任何不匹配文本。当用户从列表中选择项目时,结果函数将关联的id存储在隐藏字段中。使用表单帖子上的隐藏字段来获取员工的ID。

它可能看起来像:

查看

$('#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, ... )
{
   ...
}

答案 1 :(得分:0)

我建议使用Linq。

考虑Scott Gu的示例博客........

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
        }
}

答案 2 :(得分:0)

在控制器中用这样的东西在数据库中搜索(使用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);
}

编辑:请阅读您的评论,如果我理解正确,您只对ID感兴趣。你在javascript中使用它们,这是一种ajax调用吗?在这种情况下,您可能希望返回一个数组或一个csv字符串,并在javascript调用中处理id。