HTMLフォームで、通常のプリミティブ型をモデルにバインドするのと同じ方法で、jqueryコントロール(tokeninputなど)をどのようにバインドしますか?私はこれを行う方法を見つけるのに苦労しており、カスタムテンプレートなどを使用できることは知っていますが、jqueryプラグインには何もありません。
具体的には、tokenInputを使用しています。こちら(http://loopj.com/jquery-tokeninput/)を参照してください。これは、標準のHTMLテキスト入力に対して適用するjQueryコードです。キーを押すたびに、作成者のリストを返すためにコントローラーに移動します。作成者を事前入力することもできます。HTML5のデータタグを使用して、コントロールを事前入力します。
$("#AUTHORs").tokenInput('/author/getauthors/', {
hintText: "Enter surname",
searchingText: "Searching...",
preventDuplicates: true,
allowCustomEntry: true,
highlightDuplicates: false,
tokenDelimiter: "*",
resultsLimit: 10,
theme: "facebook",
prePopulate: $('#AUTHORs').data('AUTHORs')
});
モデルにバインドしようとしているものを正確に示すために、ビューから少しコードを投稿しました。
@model myModels.BOOK
@{
ViewBag.Title = "Edit";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Basic</legend>
<div class="editor-label">
@Html.LabelFor(model => model.TITLE)
</div>
<div class="editor-field" >
@Html.EditorFor(model => model.TITLE)
@Html.ValidationMessageFor(model => model.TITLE)
</div>
<div class="authors">
<div class="editor-field">
<input type="text" id="authors" name="authors" data-val="true" data-val-required="You must enter at least one author" data-authors="@Json.Encode(Model.AUTHORs.Select(a => new { id = a.AUTHOR_ID, name = a.FULL_NAME }))"/>
<span class="field-validation-valid" data-valmsg-for="authors" data-valmsg-replace="true"></span>
</div>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
フォームでモデルを更新しようとするときに([保存]を押した後)使用するコードは次のとおりです。
[HttpPost]
public ActionResult Edit(BOOK book)
{
if (ModelState.IsValid)
{
db.Entry(book).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Details", new { id = book.REF_ID });
}
ViewBag.REF_ID = new SelectList(db.REFERENCEs, "REF_ID", "REF_ID", book.REF_ID);
return View(book);
}
HTMLのコードを見ると、tokeninput要素から作成者をフォーマットしているように見えますが、このフォーマットには実際の問題があるようです。
<input type="text" id="AUTHORs" name="AUTHORs" data-val="true" data-val-required="You must enter at least one author" data-authors="
[{"id":156787,"name":"Faure,M."},
{"id":177433,"name":"Wang,D.Z."},
{"id":177434,"name":"Shu,L.Sh"},
{"id":177435,"name":"Sheng,W.Z."}]"
style="display: none; ">