この autosuggest プラグインを使用しています: http://aehlke.github.com/tag-it/
データベースからアイテムの配列を取得しています (現在は単なる配列です)。リストには ID とタイトルが含まれます。フォームを送信するときに、ID とタイトルの両方を取得したいと考えています。今は称号しか取れません。両方の値を取得して、新しい参照 (ID=0) を作成し、既存の参照をデータベース ルックアップなしで挿入できるようにしたいと考えています。
これは私のコードです。
book.aspx の分離コード - book.aspx.cs:
...
protected void btnSave_Click(object sender, EventArgs e)
{
Response.Write(txtReferences.Text); // this contains Titles, but I would like both values.
}
public class Reference
{
public string Title;
public int ID;
}
[WebMethod]
public static Array GetReferences(string title)
{
// this will be replaced by lookup in database.
List<Reference> References = new List<Reference>{
new Reference{ID=1, Title="My ref 1"},
new Reference{ID=2, Title="Ref ref 2"},
new Reference{ID=3, Title="Blah ref 3"},
new Reference{ID=0, Title=title} // for new tags set ID 0 to indicate that this should be created in db
};
return References.ToArray();
}
....
これは私の現在のスクリプトです:
<script type="text/javascript">
$(document).ready(function () {
var failure = function (result) {
alert(result.status + " " + result.statusText);
}
var ref = $("#<%=txtReferences.ClientID %>");
ref.tagit({
allowSpaces: true,
removeConfirmation: true,
tagSource: function (title, showChoices) {
var params = '{"title":"' + title.term + '"}';
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
error: failure,
url: "book.aspx/GetReferences",
data: params,
success: function (data) {
var assigned = ref.tagit("assignedTags");
var filtered = [];
for (var i = 0; i < data.d.length; i++) {
if ($.inArray(data.d[i].Title, assigned) == -1) { filtered.push(data.d[i].Title); }
}
showChoices(filtered);
}
});
}
});
});
</script>
そしてもちろん、book.aspx ページにテキスト ボックスがあります。
<asp:TextBox ID="txtReferences" runat="server" />
どんな助けでも大歓迎です。ありがとう。