1

従業員間を検索するための検索フィールドがあります。ビューのコードは次のようになります。

<input id="employeeSearchText" name="employeeSearchText" type="text" autocomplete="off" />  

<script type="text/javascript" language="javascript">
    $("#employeeSearchText").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "/Medarbejdere/Soeg",
                type: "POST",
                dataType: "json",
                data: { searchText: request.term },
                success: function (data) {
                    response($.map(data, function (item) {
                        return { label: item.Firstname + " " 
                 + item.Lastname, value: item.description, id: item.description }
                    }))
                }
            })
        }
    });
</script>

パス「/Medarbejdere/Soeg」は、コントローラで次のように定義されています。

[HttpPost]
public JsonResult Soeg(string searchText)
{
    EmployeeRepository repo = new EmployeeRepository();
    var result = repo.SearchByKeywords(searchText.Trim(), 10);
    return Json(result, JsonRequestBehavior.AllowGet);
}

私の問題は、一部の入力では結果が表示されないことです。実際に 1 文字だけを入力して入力を待っていると、英語のアルファベットの同じ 5 文字では一貫して結果が返されません。

「Soeg」アクションにブレークポイントを配置すると、すべての入力に対して正しく到達し、repo.SearchByKeywords() もすべての入力に対して正しい結果を返しますが、何らかの理由で、結果が AJAX 呼び出しに返されるとレンダリングされません。

この段階でデバッグを行う方法がまったくわかりません。私は、次の動作を示す MVC ミニプロファイラーを使用します (文字 'c' では結果が得られず、文字 'e' では結果が得られると仮定します)。

「e」と入力すると、アクションの呼び出しが開始され、ブレークポイントがトリガーされ、ブラウザーの左側にある mvc-mini-profiler デバッグ情報に、呼び出しにかかった時間が表示されます。「c」と入力するとアクションが呼び出され、ブレークポイントがトリガーされますが、mvc-mini-profiler デバッグ ウィンドウには表示されません。

検索文字列が「cc」になるように別の「c」を入力すると、プロファイラーは実際にはアクションへの 2 つの呼び出しを表示しますが、2 番目の「c」を入力したときのみ表示されます。

問題をさらにデバッグする方法に関する解決策や提案についてのアイデアはありますか?

前もって感謝します!

4

1 に答える 1

1

どうやら、この問題は repo.SearchByKeywords() の結果によって引き起こされたようです。

結果は正しかったのですが、JSON として返されたときに一部の入力でオートコンプリートが何らかの形で壊れていました。

根本的な原因は、返されたデータ型が、他のテーブルへの参照を持つ SQL Server で定義されたデータ型であったことです。単一要素の 1 つの参照が null の場合 (ビジネス ロジックの他の部分ではまったく問題ありませんでした)、オートコンプリート ウィジェットが何らかの理由でエラーを引き起こしました。

データベースから実際のテーブルではなく、null になることのない固定数のフィールドを含む、はるかに単純なデータ構造を返すことで、これを軽減しました。

于 2012-10-11T19:39:44.790 に答える