ASP.NET MVC "Editable" 列表框

ASP.NET MVC "Editable" ListBox

我正在使用 ASP.NET MVC 平台。在我的控制器中,我正在创建 ViewBag,它选择即来自数据库的所有名称。在我看来,我有一个 @Html.listbox 并且我正在使用 select2() ajax 函数,当我在列表框中键入时,该函数用于提供建议。例如,如果我写 "Ma" 我会按照建议列出 Maria、Mario、Martin,因为我在数据库中有它们。我的问题是我只能在它们之间进行选择,而不是添加不在数据库中的新名称。你能给我任何想法或例子吗?我想使用一些建议,因为 Google 有,你输入,得到建议,选择一些东西,然后你就可以改变它并将它添加到模型中。

这是我在视图中的代码:

<div class="form-group">
    @Html.LabelFor(model => model.Names, htmlAttributes: new { @class = "control-label col-md-3" })
    <div class="col-md-6">
        @Html.ListBoxFor(model => Model.Names, null, new { @class = "form-control input-sm" })
        @Html.ValidationMessageFor(model => model.Names, "", new { @class = "text-danger" })
    </div>
</div>

<script type="text/javascript">

    $(function () {

        $("#Names").select2({
            placeholder: "Filter names",
            maximumSelectionSize: 1,
        });

    });
</script>

我正在控制器中的 GET 中执行此操作:

// GET: Names/Create
public ActionResult Create()
{
    ViewBag.Names= new SelectList(db.Names.Select(n => n.Names));
    return PartialView("_Create");
}

编辑:
我现在使用 jquery 自动完成是这样的:

<script type="text/javascript">

    $(function () {
        $("#tags").autocomplete(
            {
                source: '@Url.Action("TagSearch", "Home")'
            });
    })
</script>

我把我的 html.textbox 改成了这样:

 <div class="form-group">
            <div class="col-md-6">
                <div class="ui-widget">
                    @Html.TextBoxFor(model => Model.Names, null, new { @class = "form-control input-sm", @id = "tags" })
                </div>
                    @Html.ValidationMessageFor(model => Model.Names, "", new { @class = "text-danger" })
            </div>
        </div>



我还有一个 returns JSON 的功能,它工作得很好,现在的问题是,当我输入建议时,建议在我的部分视图后面(在部分视图和索引视图之间)并且以我的形式出现不能选择其中任何一个(比如大标签……)。有什么帮助吗?

最后我把脚本改成了这样:

<script type="text/javascript">

    $(function () {
        $("#tags").autocomplete(
            {
                source: '@Url.Action("TagSearch", "Home")',

                open: function(){
                    setTimeout(function () {
                        $('.ui-autocomplete').css('z-index', 99999999999999);
                    }, 0);
                }

            });
        return false;
    })
</script>

我的 z 轴有问题,这完美地解决了我的问题,就像斯蒂芬在评论中建议的那样使用自动完成后。

我的最终版本是这样的:

<div class="form-group">
   <div class="col-md-6 ui-widget">
      @Html.EditorFor(model => Model.Names, new { @class = "form-control input-sm", @id = "tags" })
      @Html.ValidationMessageFor(model => Model.Names, "", new { @class = "text-danger" })
   </div>
</div>