ASP.NET MVC:数据录入表中的搜索

4

感谢您阅读。

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

谢谢

3个回答

4
一种实现方式是使用jQuery 自动完成 插件。在表单上有一个文本框,允许搜索,并有一个隐藏字段来存储id。通过AJAX使用自动完成获取基于搜索条件返回的名称/ id对列表作为JSON。将自动完成设置为从列表中强制选择--这将禁止任何不匹配的文本出现在字段中。当用户从列表中选择项目时,结果函数将关联的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' />

Controller:

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

谢谢。这听起来是个好的解决方案。我会稍微了解一下JavaScript,至少足够尝试组装你的示例。看起来我在这里有些超纲了呵呵!再次感谢。 - Luis Hernandez
我曾希望像这样简单的事情只需要使用asp.net mvc和 .net 语言就可以轻松完成,但是似乎除了演示和教程之外无法完成任何工作,还必须使用JavaScript。 - Luis Hernandez
你可以只用MVC来实现这个,但是你需要一个用于搜索的视图,然后一个用于显示搜索结果的视图,最后回到原始视图以输入所选员工的数据。如果你可以接受使用JavaScript的解决方案,那么用户体验会更好。不过,你可能要考虑一下如果没有启用JavaScript该如何处理。不过,同时处理两种情况可能并不太难。然而,在内部网络应用程序中,由于对浏览器有更多的控制权,这可能不会成为问题。 - tvanfosson
再次感谢,这是一个内部应用程序,我们可以控制浏览器。我同意,自动完成是理想的,我只需要学习足够的JS来理解它。昨晚我试图从家里实现它,但没有成功,我想我的工具箱中还缺少一些东西。今天再试一次。 - Luis Hernandez

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

谢谢您的回复。我知道如何在控制器级别进行搜索,但我的问题在于用户界面。从输入数据的视图中,我需要提供一种方法来查找员工,从所有符合条件的员工中选择一个,并返回到数据输入表单,传递所选员工的EmployeeID。我现在正在使用LINQ to SQL。 - Luis Hernandez
啊,我明白了,很抱歉我误解了。不幸的是,我自己也刚开始深入研究ASP.Net MVC的使用,因为这是一个非常新的概念。Scott Gu的博客也提供了大量关于此方面的信息 http://weblogs.asp.net/scottgu/search.aspx?q=mvc&o=Relevance 你可以尝试浏览一下,看看是否有所帮助,但除此之外,我恐怕无法提供更多建议。祝你好运,记得发布你的成果 :-D - Goober

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。


谢谢回复。看起来就像我得到的东西。我要尝试理解tvanfosson的例子。自动完成听起来对用户非常直观。太糟糕了,我只是一个初学者,不太懂JavaScript,甚至正在学习C#!! - Luis Hernandez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接