複数のオートコンプリート JQueryUI ウィジェットを使用していますが、一生正しい入力を取得できません。リストにプルするものとして使用しようとしているスクリプトの外側でC#で定義された配列がありますが、配列内の個々の文字を常に完全な配列要素ではなくリスト内の要素にしています。 :
私が使用しているコードは次のとおりです。これは主に JQueryUI デモからのものです。私が遊んでいる主な行はですavailableTags
。(これtutArray
は文字列との望ましい配列であることに注意してくださいprereqs = new JavaScriptSerializer().Serialize(tutArray)
。私は次のことを試しました:
var availableTags = '@Html.Raw(prereqs)';
上記が得られます。
var availableTags = '@prereqs';
上記の結果が得られますが、" は に置き換えられ&,q,u,o,t,;
ます。
var availableTags = '@tutArray';
とvar availableTags = '@Html.Raw(tutArray)';
利回りS,y,s,t,e,m,.,S,t,r,i,n,g,[,]
。
@{
var tutArray = tutList.ToArray();
var prereqs = (new JavaScriptSerializer().Serialize(tutArray));
}
<script type="text/javascript">
$(function () {
var availableTags = '@prereqs';
function split(val) {
return val.split(/,\s*/);
}
function extractLast(term) {
return split(term).pop();
}
$("#prereqs")
// don't navigate away from the field on tab when selecting an item
.bind("keydown", function (event) {
if (event.keyCode === $.ui.keyCode.TAB &&
$(this).data("ui-autocomplete").menu.active) {
event.preventDefault();
}
})
.autocomplete({
minLength: 1,
source: function (request, response) {
// delegate back to autocomplete, but extract the last term
response($.ui.autocomplete.filter(
availableTags, extractLast(request.term)));
},
focus: function () {
// prevent value inserted on focus
return false;
},
select: function (event, ui) {
var terms = split(this.value);
// remove the current input
terms.pop();
// add the selected item
terms.push(ui.item.value);
// add placeholder to get the comma-and-space at the end
terms.push("");
this.value = terms.join(", ");
return false;
}
});
});
</script>
This should be an autocomplete box.
<p><input type="text" id="prereqs"/></p>
availableTags を取得して、配列を文字列の配列として解析するにはどうすればよいですか ([ "Inserting a Tag", "test1" ] など)。
編集:質問されている人のために、ここにコントローラーがありますが、問題はここにあるとは思いません。このコードは、チュートリアル/編集ページの非常に小さな部分である PreReqs.cshtml からのものです。
//
// GET: /Tutorials/Edit/5
[Authorize]
public ActionResult Edit(Int32 id)
{
Tutorial tutorial = db.Tutorials.Find(id);
ViewBag.Tutorials = (from tut in db.Tutorials
select tut).ToList();
if (tutorial == null)
{
return HttpNotFound();
}
ViewBag.CategoryId = new SelectList(db.Categories, "Id", "Name", tutorial.CategoryId);
ViewBag.NextTutorialId = new SelectList(db.Tutorials, "Id", "Name", tutorial.NextTutorialId);
return View(tutorial);
}