并感谢您的阅读。ASP.NET MVC:在数据输入表中搜索
我正在构建一个数据输入表单。我试图找出一种方法让用户提供一个条件(例如姓氏),在员工表中搜索符合条件的所有员工,以可选择正确员工的方式显示结果,并通过该员工的ID返回到数据输入表格,以便他们可以完成记录并保存。
谢谢
并感谢您的阅读。ASP.NET MVC:在数据输入表中搜索
我正在构建一个数据输入表单。我试图找出一种方法让用户提供一个条件(例如姓氏),在员工表中搜索符合条件的所有员工,以可选择正确员工的方式显示结果,并通过该员工的ID返回到数据输入表格,以便他们可以完成记录并保存。
谢谢
这样做的一种方法是使用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, ...)
{
...
}
我建议使用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
}
}
像这样的事情在控制器(使用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。
感谢您的答复。这看起来像我得到的。试着去了解tvanfosson的例子。自动完成听起来对用户来说非常直观。太糟糕了我刚刚开始作为一个开发人员,并不真正知道任何JavaScript,嘿,我只是学习C#! – 2009-05-05 22:29:23
感谢您的答复。 我知道如何在控制器级别进行搜索,我的问题是用户界面。从我输入数据的角度来看,我需要提供一种方法来搜索员工,从符合条件的所有匹配中选择一个,然后返回到传递选定员工的EmployeeID的数据输入表单。我现在正在使用LINQ to SQL。 – 2009-05-05 21:00:36
啊我看到了,对不起,我误解了。不幸的是,我自己才刚刚开始钻研使用ASP.Net MVC,因为它是一个新概念。 Scott Gu的博客也有很多关于这方面的信息。 http://weblogs.asp.net/scottgu/search.aspx?q=mvc&o=Relevance 你可以尝试筛选它以获得一些帮助,但除此之外,我害怕我不能提出其他建议。 祝你好运,一定要发布你的结果:-D – Goober 2009-05-05 21:05:00