jqueryダイアログ内で、jqueryUIのjqueryオートコンプリート機能を使用したいと思います。
次に、コントローラー(ASP.NET MVC2を使用しています)で次のようなアクションを準備しました。
public ActionResult GetForos(string startsWith, int pageSize)
{
// get records from underlying store
int totalCount = 0;
string whereClause = "Foro Like '" + startsWith + "%'";
List<Foro> allForos = _svc.GetPaged(whereClause, "Foro", 0, pageSize, out totalCount);
//transform records in form of Json data
List<ForoModelWS> foros = new List<ForoModelWS>();
foreach ( Foro f in allForos)
foros.Add( new ForoModelWS() { id= Convert.ToString(f.ForoId),
text= f.Foro + ", Sezione: " + f.Sezione + ", " + f.AuthorityIdSource.Name });
return Json(foros);
}
クラスForoModelWSは、jsonで転送されるデータを保持するためにのみ使用される単純なクラスです。ここにあります
public class ForoModelWS
{
public string id;
public string text;
}
クライアント側には、次のjqueryコードがあります。
<input id="theForo" />
<script type="text/javascript">
$(document).ready(function() {
$("#theForo").autocomplete({
source: function(request, response) {
$.ajax({
type: "post",
url: "/Foro/GetForos",
dataType: "json",
data: {
startsWith: request.term,
pageSize: 15
},
success: function(data) {
response($.map(data, function(item) {
return {
label: item.text,
value: item.text
}
}))
}
})
},
minLength: 2,
select: function(event, ui) {
},
open: function() {
$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
},
close: function() {
$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
}
});
});
</script>
ただし、提案のあるスライディングウィンドウは表示されません。応答関数内にアラートを入れると、正しいデータを見ることができます。
私は何かが恋しいですか?
助けてくれてありがとう
最初の編集:さらに、返されたリストで選択した要素の「id」プロパティを使用するようにコードを変更するにはどうすればよいですか?
2番目の編集:Chromeデベロッパーツールで詳細を確認しましたが、オートコンプリートを開始するとエラーが表示されることがわかりました。以下:
Uncaught TypeError: Cannot call method 'zIndex' of undefined @ _assets/js/jquery-ui-1.8.4.custom.min.js:317
Uncaught TypeError: Cannot read property 'element' of undefined @ _assets/js/jquery-ui-1.8.4.custom.min.js:321
Uncaught TypeError: Cannot read property 'element' of undefined @ _assets/js/jquery-ui-1.8.4.custom.min.js:320
オートコンプリートプラグインは、スライディング提案のz-Indexをコンテナの1レベル上に設定しようとしたときに、要素を見つけられないようです。最初のエラーは、jqueryUIダイアログが開いたときに表示されます。オートコンプリートの入力は、jqueryダイアログ内にあるjqueryタブ内にあります
3番目の編集:HTMLマークアップを追加して完成させます
<td width="40%">
<%= Html.LabelFor(model => model.ForoID)%>
<br />
<%= Html.HiddenFor(model => model.ForoID) %>
<input id="theForo" />
<%= Html.ValidationMessageFor(model => model.ForoID, "*")%>
</td>