效果图
如果想给每个文本框都加上自动完成功能该怎么办呢?一个一个添加太麻烦。可以给文本框设置一个属性,让这个属性的值等于Controller里的action。就像这样:
父项图号:子项图号:
$(document).ready(function () { $(":input[data-autocomplete]").each(function () { $(this).autocomplete({ source: $(this).attr("data-autocomplete"),autoFocus:true }); });});
QuickSearch方法如后。
jqGrid的搜索框还是单独做吧。
View
在colModel中给字段加上一个dataInit事件。这样在编辑和查找时都会有自动提示了。
colModel: [ { name: 'PNumber', width: 40, index: 'PNumber', editable: true, editrules: { required: true },editoptions:{ dataInit:numberAuto}, searchoptions: { dataInit:numberAuto, sopt: ['eq', 'cn'] } }, { name: 'CNumber', width: 40, index: 'CNumber', editable: true, editrules: { required: true }, editoptions: { dataInit: numberAuto }, searchoptions: { dataInit:numberAuto, sopt: ['eq', 'cn'] } }]
function numberAuto(e) { $(e).autocomplete({source:'/BOM/QuickSearch',autoFocus:true,delay:100});}
Controller:
通过Union查询操作符将2个字段合并(自动去除重复项),然后取出前10条数据。这个action传递给autocomplete里的source属性:autocomplete({source:'/BOM/QuickSearch',autoFocus:true,delay:100})。
public ActionResult QuickSearch(string term) { var q = ( from p in db.BOM where p.PNumber.Contains(term) select p.PNumber ) .Union ( from c in db.BOM where c.CNumber.Contains(term) select c.CNumber ) .Take(10); return Json(q, JsonRequestBehavior.AllowGet); }
--END--