Select2 已输入的过帐值

Posted

技术标签:

【中文标题】Select2 已输入的过帐值【英文标题】:Select2 posting values that have been entered 【发布时间】:2017-03-15 22:55:49 【问题描述】:

我在我的 asp.net mvc 网站中使用 select2 并让它适用于 html <select>。但是,我发现很难找到一种方法来检索用户在提交时输入的值。一旦进入@using (Html.BeginForm) 元素,select2 就不再起作用,只是显示为默认值。我试过这个教程,但它不适合我:http://www.datahaunting.com/mvc/select2-simple-example-in-asp-net-mvc/

这是我目前拥有的以及我尝试过的:

@model AssignerWebTool.Models.CreateUserModel
@
ViewBag.Title = "Create User";

<select id="select" class="select" multiple="multiple"> //This works but I have no way of getting the values entered
<option></option>
</select>

<h2>Create User</h2>
@using (Html.BeginForm("Create", "user", FormMethod.Post, new  @class = "select", role = "form" ))

@Html.AntiForgeryToken()
<h4>Create a new account.</h4>
<hr/>
@Html.ValidationSummary("", new @class = "text-danger")
<div class="form-group">
    @Html.LabelFor(m => m.Email, new @class = "col-md-2 control-label")
    <div class="col-md-10">
        @Html.TextBoxFor(m => m.Email, new id = "select" ) //This does not work and does not select2

        <select id="select" class="select" multiple="multiple"> //Also does not work now inside of here
            <option></option>
        </select>
    </div>
</div>

<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="submit" class="btn btn-default" value="Create User"/>
    </div>
</div>




@section scripts

<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.min.css" rel="stylesheet" />
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"></script>
<script>
    $(function () 

        $("#select").select2(
            placeholder: "Email address(es)",
            tags: true,
            tokenSeparators: [',', ' ']
        );
    );
</script>

【问题讨论】:

当您尝试上面的代码时,除了您当时尝试的选择之外,您是否摆脱了选择尝试?您有 3 个 id="select" 元素,运行 select2 的 jquery 仅适用于它找到的第一个元素。请通过注释掉第一个选择来重试,然后看看下一个是否有效。 这确实解决了我遇到的问题之一,而且很有意义。我仍然无法让它为 @Html.TextBoxFor 元素工作,即使我只是在它上面使用 id="select" 。有什么建议吗? 我尝试复制,但我意识到我不确定您在使用 TextBoxFor 时遇到了什么问题。当我使用完整的 js 库时,我遇到的唯一问题得到了解决:select2.full.min.js - 不确定你是否想尝试。问题是什么,它是在没有呈现 jquery 控件的情况下默默地失败还是出现错误? 是的,试过了,它至少变成了一个 select2 框。我现在遇到的问题是它只是使用默认的选择 2,标签和标记分隔符不起作用,但占位符正在工作。文本框可能不支持它们吗?感谢您迄今为止的帮助 【参考方案1】:

从 cmets 我们调整了以下内容:

-只有 1 个 id="select" 的元素通过 JQuery 选择来启用 Select2 功能。

-使用 v4.0.x 的 select2.full.js 库以完全向后兼容 v3.5.x

似乎对于在 Select2 v4.0.x 中使用的 &lt;input type="text"&gt;(通过问题代码示例中的 @Html.TextBoxFor() 生成)字段存在限制(https://github.com/select2/select2/releases 列出“有限支持”对于 v4.0.0 RC1),其中包含的标签和标记分隔符不起作用。

不要使用 html 助手生成的输入字段 - 使用选择字段,因为建议与 Select2 一起使用(请参阅 v4.0.0 的发行说明),并确保它在表单内并设置了 name 属性到模型的属性,如果你想加载控制器通过模型传递的值,那么也循环遍历这些值:

<select id ="select" name="Email" class="select" multiple="multiple">
    @foreach (var item in Model.Email)
        
            <option>@item </option>
        
    
</select>

另外,如果 Email 只是一个字符串,它只会在提交表单时从 select 元素中获取第一个选定的项目(如果至少依赖模型绑定),要获得更多信息,您可以将属性设置为 @987654325 @ 或 SelectList,此时您可以返回使用 html 帮助程序,但使用 DropDownFor 来生成 select 元素(尽管您不需要,生成的 html 基本上与上面相同)。

@Html.DropDownListFor(m => m.Email, Model.Email, new  multiple = "multiple" )

你也可以直接在自动生成的id上调用Select2:

$("#Email").select2(

并在您的 userController 中处理已发布的表单:

[HttpPost]
public ActionResult Create(CreateUserModel model)

  ...

通过模型绑定,这不是唯一的方法,但我会推荐。

希望这对您有所帮助!

【讨论】:

我并不担心实际为下拉列表传递值,我更多的是寻找要标记化的值,因为它们在此示例中输入:select2.github.io/examples.html#tokenizer 看来这可能不是除非我遗漏了什么,否则有可能吗? 如果我使用 想通了,可以从,select中获取数据。使用 Request.Form["Email"] 的元素。谢谢你对我的帮助很大。

以上是关于Select2 已输入的过帐值的主要内容,如果未能解决你的问题,请参考以下文章

将 select2 显示为纯输入文本

Select2 - 选项项中的自定义输入字段,防止点击事件

更新 select2 组件的选项 - vue js

将 Select2 选项显示为已选择

动态添加选项到 select2

Select2 搜索输入在打开时未获得焦点