検索でNonFactors.Mvc.Gridを使用しています。明白なものを見落とさない限り、私はas shown hereを実装しています。AJAX検索では、高速検索時に正確な結果が返されません。
@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の呼び出しを絞ることをお勧め何か。 – Chrille
あなたが使用しているコントロールについてはわかりませんが、古い結果がサーバーより新しいものより速く、古い結果(「te」検索に関連すると言う)が新しいものを上書きする(「テスト」に関連している) – Evk
検索する前に、ユーザーが入力を停止していることを確認する必要があります。私はx(500ms)を待つために私の検索機能にタイマーを置くでしょう。キーを押すと、タイマーが開始しているかどうかを確認して開始し、xを500msにリセットします。したがって、すべてのキーアップに対して、タイマーは500msにリセットされます。最後のキーアップから500ms後に検索が実行されます。あなたが検索機能を呼び出すときにタイマーを止めるのを忘れないでください。 – KevDevMan