我正在使用jquery-ui-autocomplete开发一个具有自动完成功能的文本框。我无法让它像我想要的那样运作。首先,我有一个公司表,其中一些列值是缩写的。)A.B.C。 Corp ..具有此自动完成功能的所有内容均有效,除了您键入的所需功能:abc corp或ABC corp它将与A.B.C匹配。公司,但它没有:(它只匹配你输入a.b.c. corp。这是我的代码到目前为止: 我不完全确定如何去做。 任何正确方向的小费都非常受欢迎。 我怎么能将abc corp与A.B.C匹配。公司? 我目前的方式不起作用
Regex.Match(hint, "/([A-Za-z\\.])/g"
由于 客户方:
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<link href="Content/themes/base/all.css" rel="stylesheet" />
<script src="Scripts/jquery-1.10.2.min.js"></script>
<script src="Scripts/jquery-ui-1.11.4.min.js"></script>
<asp:TextBox runat="server" ID="customerSearch"></asp:TextBox>
<script type="text/javascript">
$(document).ready(function () {
$("#MainContent_customerSearch").autocomplete({
source: function (request, response) {
$("#MainContent_customerSearch").on("change keyup", function () {
var hint = { hint: $("#MainContent_customerSearch").val() };
//call webmethod
$.ajax({
type: "POST",
url: "Default.aspx/getProducts",
data: JSON.stringify(hint),
dataType: "json",
contentType: "application/json; charset=utf-8",
}).success(function (data) {
response($.map(data.d, function (item) {
return {
label: item.Description,
value: item.Description
}
}));
}).error(function (error) {
console.log(error);
});
});
},
delay: 0,
minLength: 1,
autoFocus: true
});
});
</script>
</asp:Content>
服务器端:
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static List<Product> getProducts(string hint)
{
List<Product> products = new List<Product>();
using (var db = new AppDB())
{
try
{
products = db.Products.Where(p => p.Description.Contains(hint)).ToList();
}
catch
{ }
}
return products;
}
}
答案 0 :(得分:0)
我们的想法是忽略公司名称中的特殊字符
向_Default
类
private string RemoveSpecialChars(string @string)
{
return @string.Where(char.IsLetterOrDigit).Aggregate(new StringBuilder(), (s, c) => s.Append(c)).ToString();
}
然后像这样改变你的WebMethod
public static List<Product> getProducts(string hint)
{
List<Product> products = new List<Product>();
using (var db = new AppDB())
{
try
{
products = db.Products.Where(p => RemoveSpecialChars(p.Description).Contains(RemoveSpecialChars(hint))).ToList();
}
catch
{ }
}
return products;
}