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