2009-05-05 26 views
4

并感谢您的阅读。ASP.NET MVC:在数据输入表中搜索

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

谢谢

回答

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, ...) 
{ 
    ... 
} 
0

我建议使用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 
     } 
} 
+0

感谢您的答复。 我知道如何在控制器级别进行搜索,我的问题是用户界面。从我输入数据的角度来看,我需要提供一种方法来搜索员工,从符合条件的所有匹配中选择一个,然后返回到传递选定员工的EmployeeID的数据输入表单。我现在正在使用LINQ to SQL。 – 2009-05-05 21:00:36

+0

啊我看到了,对不起,我误解了。不幸的是,我自己才刚刚开始钻研使用ASP.Net MVC,因为它是一个新概念。 Scott Gu的博客也有很多关于这方面的信息。 http://weblogs.asp.net/scottgu/search.aspx?q=mvc&o=Relevance 你可以尝试筛选它以获得一些帮助,但除此之外,我害怕我不能提出其他建议。 祝你好运,一定要发布你的结果:-D – Goober 2009-05-05 21:05:00

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。

+0

感谢您的答复。这看起来像我得到的。试着去了解tvanfosson的例子。自动完成听起来对用户来说非常直观。太糟糕了我刚刚开始作为一个开发人员,并不真正知道任何JavaScript,嘿,我只是学习C#! – 2009-05-05 22:29:23