1

ASP.NET MVCとプログラミングは初めてで、このテーマに関する資料を高低で検索しましたが、特定の問題に対する具体的な答えは見つかりませんでした。

私が取り組んでいるプロジェクトでは、WCFサービスを使用する必要があります。最初は、機能するjQueryオートコンプリート関数から始めましたが、コードをWCFサービスに移動すると、一部の通信が切断されました。オートコンプリート機能は機能しなくなりました

WCFサービス

public IList<Location> QuickSearchLocation(string term)
    {
        using (var db = new InspectionEntities())
        {
            //return all locations except the reserved "Other"
            return db.Locations
                .Where(r => r.LocationName.Contains(term) && r.LocationId !=    Constants.OtherId)
                .ToList();
        }
    } 

上記のコードは、子テーブルとの関係に基づいてユーザー入力を受け取ることを目的としています。ユーザー入力が子テーブルのデータと一致しない場合、ユーザーエントリはメインデータベースの「その他」の列に保存されます。

コントローラ

public ActionResult QuickSearchLocation(string term)
    {
        return Json(_service.QuickSearchLocation(term), JsonRequestBehavior.AllowGet);
    }

意見

div class="editor-field">
        @Html.TextBoxFor(m=>m.LocationId,new {data_autocomplete =     Url.Action("QuickSearchLocation", "Inspection")})

脚本

$(document).ready(function () {

$(":input[data-autocomplete]").each(function () {

    $(this).autocomplete({ source: $(this).attr("data-autocomplete")});
});

私の問題に関する洞察は役に立ちます。

4

1 に答える 1

1

オートコンプリートでは、ラベルのみまたは値のあるラベルが必要です。一方、Locationオブジェクト全体を提供していることになります。

したがって、ヘルパークラスを作成する必要があります。

public class AutocompleteLocation{
    public AutocompleteLocation(Location location){
        label = location.LocationName;
        value = location.LocationId;
    }
    public string label {get;set;}
    public string value {get;set;}
}

QuickSearchLocationこの後、コントローラーのメソッドを次のように変更する必要があります。

public ActionResult QuickSearchLocation(string term)
{
    return Json(_service.QuickSearchLocation(term).Select(l => new AutocompleteLocation(l)).ToList(), JsonRequestBehavior.AllowGet);
}

また、すべての結果を返すのではなく、最初のいくつか(たとえば、10)だけを返すことを検討する必要があります。

于 2012-11-02T14:35:17.277 に答える