0

控制器

[HttpGet]
public JsonResult GetTags()
{
    var data = entity.Tags.Select(x => new { tagName = x.TagName });
    return Json(new { result = data }, JsonRequestBehavior.AllowGet);
}

脚本

$(function () {
    function split(val) {
        return val.split(/,\s*/);
    }
    function extractLast(term) {
        return split(term).pop();
    }
    $("#tags")
// 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("autocomplete").menu.active) {
    event.preventDefault();
        }
})
.autocomplete({
    source: function (request, response) {
    $.getJSON('@Url.Action("GetTags", "Question")', {
        term: extractLast(request.term)
}, response);
},
    search: function () {
        // custom minLength
    var term = extractLast(this.value);
    if (term.length < 2) {
        return false;
    }
    },
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;
    }
});
});

实际上,脚本来自默认的 jquery-ui-autocomplete-with-multi-values

剃刀

<div class="demo">
    <div class="ui-widget">
        @Html.TextBoxFor(x => x.Title, new { @class = "my_text_box", id = "tags" })
    </div>
</div>

控制器动作被触发,但我在文本框中看不到任何数据。我调试了javascript,但函数没有触发。我该如何解决?

我可以auto-complete-with-multi-values用另一种方式,而不是这种方式。

4

1 回答 1

1

您的 Action 方法正在返回一个对象集合,其结构如下;

[ { tagName: result1}, {tagName: result2} ... ]

因为您直接将结果用于自动完成,所以该方法需要以以下两种格式之一返回数据;

来自本地数据、url 或回调的数据可以有两种变体:

字符串数组:
[ "Choice1", "Choice2" ]

具有标签和值属性的对象数组:
[ { label: "Choice1", value: "value1" }, ... ]

或者,您可以获取结果并将它们适当地映射到上述格式之一,然后再将它们发布到响应方法。

于 2012-09-01T03:26:23.740 回答