【发布时间】:2017-03-20 15:42:46
【问题描述】:
我正在使用 NonFactors.Mvc.Grid 进行搜索。除非我忽略了一些明显的东西,否则我正在实施它as shown here。
在父视图中,我有这条线生成网格:
@Html.AjaxGrid(Url.Action("UserSearch", new { }))
我有搜索文本框:
@Html.TextBoxFor(x => x.WildCardSearch, new { @class = "form-control per90 mt5 mr5 pull-left", placeholder = "Search", autofocus = "autofocus" })<i class="fa fa-125 fa-search"></i>
最终生成这个:
<input
autofocus="autofocus"
class="form-control per90 mt5 mr5 pull-left"
id="WildCardSearch"
name="WildCardSearch"
placeholder="Search"
type="text"
value="">
这是处理它的客户端方法:
$(document).on('keyup', '#WildCardSearch', function () {
$('.mvc-grid').mvcgrid({
query: 'search=' + this.value,
reload: true
});
});
这是执行搜索的服务器端方法:
public PartialViewResult UserSearch(string search)
{
var results = // Initial query that returns an IQueryable of all the raw results.
if (!string.IsNullOrEmpty(search))
{
search = search.ToLower();
results = from r in results
let bothNames = r.LastName + ", " + r.FirstName
where
r.FirstName.ToLower().Contains(search) ||
r.LastName.ToLower().Contains(search) ||
bothNames.ToLower().Contains(search) ||
r.Phone.Contains(search) ||
r.Email.Contains(search)
select r;
}
return PartialView(results);
}
现在,事情是这样的......
如果我在搜索文本框中输入非常缓慢,并等待每次按键处理,那么结果总是 100% 准确。但是,如果我打字速度很快,那么结果最终会变得一团糟。有时这是准确的,但大多数时候并不准确。
【问题讨论】:
-
也许不能解决原始问题,但我建议限制 ajax 调用,直到用户停止写入。
-
不知道您使用的控件,但问题表明旧结果有时来自服务器比新结果更快,因此旧结果(例如与“te”搜索相关)会覆盖新结果(与“测试”)。
-
您需要确保用户在搜索前已停止输入。我会在我的搜索功能上放置一个计时器来等待 x(500 毫秒)。在按键上,检查计时器是否已启动并启动它,并将 x 重置为 500 毫秒。因此,对于每一个按键,计时器都会重置为 500 毫秒。搜索将在您最后一次启动后运行 500 毫秒。 (调用搜索功能时不要忘记停止计时器。
标签: c# jquery ajax asp.net-mvc