背景
現在、私のプロジェクトではautocomplete
、いくつかのフィールドに jQuery を使用しています。
コンテキストを提供するために、アプリケーションはRuns
. それぞれに が関連付けられているRun
必要があります。Route
ユーザーが走った場所のRoute
意味。
ユーザーが を入力するRoute
と、そのリストがオプションRoutes
によって表示されautocomplete
ますが、データベースではRouteID
検証のために が必要です。
これを補うためRouteID
に、HiddenFor
HtmlHelper に保存しました。ユーザが からルートを選択するautocomplete
と、HiddenFor
が割り当てられます。
私の問題は何ですか?
ユーザーがリストから選択するか、存在しない を入力する代わりに
、 のフルネームを入力すると、は割り当てられません。これが発生した場合、その名前でを見つけて、サーバー上に存在することを確認する必要があります。Route
autocomplete
Route
HiddenFor
Route
この回避策を毎回作成する必要がないようにしたいと思いますautocomplete
。
結論 とにかく、そのautocomplete
行為をより多くのようにする方法はありますselect list
か?ユーザーには、autocomplete
リストから 1 つのオプションのテキストを選択する以外に選択肢がなく、選択したオプションの値がサーバーに送信されるようにしたいと考えています。
メソッドに固執する必要HiddenFor
がある場合、少なくともユーザーにautocomplete
リストからオプションを選択させる方法はありますか?
以下は私が現在使用しているコードです
マークアップ
@Html.LabelFor(model => model.RouteID, "Route")
<input type="text" data-autocomplete-url="@Url.Action("../Route/GetRoutesByUser")" />
@Html.HiddenFor(m => m.RouteID)
jQuery
$('*[data-autocomplete-url]')
.each(function () {
$(this).autocomplete({
source: $(this).data("autocomplete-url"),
minLength: 2,
select: function (event, ui) {
log(ui.item.id, ui.item.name);
}
});
});
コード
public ActionResult GetRoutesByUser(string term)
{
var routeList = db.Routes.Where(r => r.Name.Contains(term))
.Take(5)
.Select(r => new { id = r.RouteID, label = r.Name, name = "RouteID"});
return Json(routeList, JsonRequestBehavior.AllowGet);
}