2009-05-05 25 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