asp.net 回发后不保留Select2多个选定值

bvjveswy  于 2023-04-13  发布在  .NET
关注(0)|答案(3)|浏览(123)

我有一个问题select2值不显示时,点击提交或页面回发发生。我从数据库加载数据 AJAX 助手。
下面是我的select2代码:

$('#<%=fstName.ClientID%>').select2({
        placeholder: 'Enter Reviewer',
        minimumInputLength: 0,
        multiple: true,
        autoClear:false,  
        ajax: {
            type: 'POST',
            url: 'BulkPickers/GetRev',
            dataType: 'json',

            data:
            function (term, page) {
                return {
                    appinstid: appInstId,
                    searchTerm: term,
                    selection: $('#<%=fstName.ClientID%>').val() 
                };
            },
            results: function (data, page) {

                var myResults = [];
                $.each(data, function (index, item) {
                    myResults.push({
                        id: item.id,
                        text: item.text
                    });
                });

                return {
                    results: myResults
                };
            },
            initSelection:
               function (element, callback) {
                   var data = [];
                   $(element.val().split(",")).each(function () {
                       data.push({ id: this, text: this });
                   });
                   callback(data);
               }
        }
    });
fxnxkyjh

fxnxkyjh1#

我找到了解决方案。需要在文本更改时填充隐藏字段值,然后在select2上使用隐藏输入值进行初始化。以下是完整代码:

$j('#<%=txtVendor.ClientID%>').select2({

        placeholder: 'type the name ',
        minimumInputLength: 0,
        multiple: true,
        autoClear:false,  
        ajax: {
            type: 'POST',
            url: 'BulkPickers/GetVendor',
            dataType: 'json',

            data:
            function (term, page) {
                return {
                    appinstid: appInstId,
                    searchTerm: term,
                    selection: $j('#<%=txtVendor.ClientID%>').val() 
                };
            },
            results: function (data, page) {

                var myResults = [];
                $j.each(data, function (index, item) {
                    myResults.push({
                        id: item.id,
                        text: item.text
                    });
                });

                return {
                    results: myResults
                };
            }
        }
    }).select2("data",vendobj);

    $j('#<%=txtVendor.ClientID%>').change(function () {
        var selections = (JSON.stringify($j('#<%=txtVendor.ClientID%>').select2('data')));
        $j('#<%=hdnVend.ClientID%>').attr("value", selections);
    });
laawzig2

laawzig22#

我相信这可能是由于您在回发期间没有重新填充SELECT中的项目造成的(因为您使用 AJAX 填充它们,并且它们不是您模型的一部分。)因此,您试图将SELECT的值设置为不存在的OPTION的ID。
我描述了这个问题,并使用模型中引用的项目填充SELECT,这意味着在回发后,该值会自动保留在SELECT中。不需要“手动”设置该值。OPTION必须在SELECT中才能显示。

ubby3x7f

ubby3x7f3#

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:DropDownList ID="DropGroup" ClientIDMode="Static" runat="server" CssClass="form-control s2multi" DataSourceID="GroupDataSource" DataTextField="Title" DataValueField="Id"></asp:DropDownList>
        <asp:HiddenField ID="HiddenFieldGroup" ClientIDMode="Static" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

<script>
$(document).ready(function () {
    $(".s2multi").select2(
        {
            multiple: true,
            autoClear: false,
            placeholder: {
                id: 0,
                text: 'انتخاب کنید'
            }
        }
    ).val(null).trigger('change');
});
</script>

protected void BtnSearch_Click(object sender, EventArgs e)
{
    ScriptManager.RegisterStartupScript(this, this.GetType(), "g1", "$(document).ready(function () { $('#DropGroup').val([" + HiddenFieldGroup.Value + "]).trigger('change'); });", true);
}

相关问题