RazorHTMLを使用したMVC4でjqueryuiオートコンプリートを使用しています。ハードコードされた値で問題なく使用できますが、データベースに接続して、表示される値をハードコードする必要がないようにする方法を考えていました。
2 に答える
MVC4を使用している場合は、ビューからアクセスできるアクションを作成する必要があります(アクションのURLをレンダリングします)。次に、オートコンプリートjqueryを設定するときに、これ(url)をソースとして設定する必要があります。
リモートソースのドキュメントはこちらです。
MVCの場合、次のようになります。
$( "#birds" ).autocomplete({
source: "/MyController/OptionsAction",
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.value + " aka " + ui.item.id :
"Nothing selected, input was " + this.value );
}
});
ビューが1つまたは10のフォルダーの深さであっても、MVCの@ URL.Actionを使用して、URLが正しくエンコードされていることを確認することをお勧めします。
上記の例「/MyController/ OptionsAction」では、ビューを1つ下のフォルダーに移動した場合は機能しませんが、@URL.Actionは引き続き機能します。
ajax呼び出しの形式は次のようになっていることに注意してください。
- データの送信:
url(投稿先)
データ(投稿するデータ)
type(行われる要求のタイプ:POSTまたはGETまたはPUT。空白のままの場合のデフォルトはGETです)
contentType(サーバーにデータを送信するときに使用するコンテンツタイプ。必要な場合を除いて変更しない方がよい)
- データ受信中:
dateType(期待しているデータ型:この場合はjson)
成功(リクエストが成功した場合に呼び出される関数)
$('#Country').autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("GetCountries", "User")',
data: "{ 'CountrySearch': '" + $('#Country').val() + "' }",
dataType: "json",
type: "POST",
contentType: 'application/json',
success: function (data) {
response($.map(data, function (item) {
return JSON.parse(item);
}))
},
error: function (jqXhr, textStatus, errorThrown) { alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')"); },
})
},
minLength: 1,
});
国が次のようなデータベース呼び出しからデータを返す場合:
{"国":"["オーストラリア"、"オーストリア "、"カナダ "、"米国 "]"}
public JsonResult GetCountries(string CountrySearch)
{
string[] Countries = new AddressManager().GetCountries(CountrySearch);
string serialisedList = new JavaScriptSerializer().Serialize(Countries);
return new JsonResult { Data = new { Countries = serialisedList }, ContentEncoding = Encoding.UTF8, ContentType = "text/plain", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}