私はまだJqueryを学んでおり、手元にあるタスクと少し混同しています。
単純なタスクのようです...クリック時にオプションを入力するボックスがあります。誰かが実際にリストの表示をリクエストした場合にのみ、ページの読み込み時にデータが読み込まれることを望まない。また、1回だけ入力する必要があります。誰かがリストを展開するたびにリクエストを送信したくありません。
Select要素に関数呼び出しがあると思います
<select id="usersList" name="usersList" onclick="getUsers()">
そして、Javascript getUsers()関数にJson GetUsers()ActionMethodを呼び出してそのリストを取得させます。どうやって ?
何かのようなもの...?
function getUsers()
{
getJSON("/Users/GetUsers", null, function (data){}
}
またはJQuery?...
$("usersList").click(
$.getJSON("/Users/GetUsers", null, function (data) {}
)
私はこの投稿を見たことに言及する必要があります: selectlistがロードされたとき(ドキュメントではなく)jQueryでjsonデータをselectlistに入力します
しかし、私はそれをすべてまとめて助けてください。前もって感謝します!
以下に、選択ボックスに入力するために使用するJavaScriptを示します。
$.getJSON("/Users/GetUsers", null, function(data) {
$("#UsersList option").remove(); // Remove all <option> child tags.
$.each(data.Users, function(index, item) { // Iterates through a collection
$("#UsersList").append( // Append an object to the inside of the select box
$("<option></option>") // Yes you can do this.
.text(item.Description)
.val(item.Id)
);
});
});
ユーザーが選択ボックスをクリックしたときではなく、ページの読み込み時にこれをトリガーすることをお勧めします。 jQuery AJAXはデフォルトでは非同期)であるため、選択ボックスが空になるまで1〜2時間があり、ユーザーを混乱させる可能性があります。
これはあなたの質問の範囲でしたか、それともMVC側の支援も必要ですか? ASP.Net MVCを使用している場合、実際にはJsonResultの特定の結果タイプがあり、対応するビューを必要としないため、JSONコントローラーメソッドの作成が少し簡単になります。また、匿名データ構造を使用して、メソッド固有の予測を少し簡単にすることもできます。
[〜#〜] edit [〜#〜]これは、上記のjQueryコードが理解できるJSON構造を返すための基本的な方法です。プロパティu.Username
およびu.ID
Usersオブジェクトに依存します。
[HttpPost]
public JsonResult GetUsers() {
return Json(new {
Users = from u in _usersRepository.Get()
select new { Description = u.Username, ID = u.ID }
});
}
ただし、できるだけ早くこのアプローチを中止し、標準のJSONメッセージ構造を使用することをお勧めします。私が使用するものは次のようなものです:
{
Success: bool,
LoggedIn: bool,
ClientErrors: [
{ Number: int, Description: string, Parameter: string },
{ Number: int, Description: string, Parameter: string }...
],
ServerErrors: [
{ Id: int, Message: string },
{ Id: int, Message: string }...
],
Data: {}
}
これを行ういくつかの理由を次に示します。
私の構造をの方法と考えてはいけません。明らかに、アプリケーションのニーズは私のアプリケーションのニーズと大きく異なる可能性があります。一貫性、特定の構造よりも、ここでのレッスンです。
編集:2016年6月1日-人々がまだこの答えを見ているように見える。ドロップダウンの設定に関しては、双方向バインディングフレームワークの使用を検討することをお勧めします。個人的には、Knockout.JSが簡単で軽量であることを好みますが、Angular.JSも同じように機能します。それ以外は、この回答の残りの部分はまだかなり最新です。
編集:2016年8月10日-コードにコンマがありませんでした。
JQueryオプションを使用します。
_// You are missing the new anonymous function call
$("#usersList").click(function() {
// If the select list is empty:
if ($(this).find("option").size() > 0) {
// Documentation on getJSON: http://api.jquery.com/jQuery.getJSON/
$.getJSON("/Users/GetUsers.php", null, function (data) {
$.each(data.items, function(i,item){
// Create and append the new options into the select list
$("#usersList").append("<option value="+item.id+">"+item.yourName+"</option>");
});
});
}
});
_
append()
操作は比較的「高価」なので、情報を含む文字列を作成して、次のように一度だけ追加することもできます。
_var collaboration = "";
$.each(data.items, function(i,item){
collaboration += "<option value="+item.id+">"+item.yourName+"</option>";
});
$("#usersList").append(collaboration);
...
_
jsfiddle は、選択リストが空かどうかを判断する方法を示しています。