0

我在我的MVC项目中使用Select2 Dropdown下拉列表,如下所示。尽管我可以直接通过AJAX传递“查询”参数,但我无法在下面的数据部分中获取所选文本或下拉列表的值。如何得到它?无法获得Select2下拉列表的选定值

@Html.DropDownListFor(x => x.StudentId, Enumerable.Empty<SelectListItem>(), 
    new { style ="width: 100%;" }) 

$("#StudentId").select2({ 
    multiple: false, 
    placeholder: "Select", 
    allowClear: true, 
    tags: true, 

    ajax: { 
     url: '/Grade/StudentLookup', 
     dataType: 'json', 
     delay: 250, 

     data: function (params) { 
      return { 
       //q: params.Name, // search term 
       //page: params.page 
       query : 'test' //this parameter can be passed via AJAX 
       //!!! but I cannot get the selected text or value of dropdownlist 
      }; 
     },    

     processResults: function (data, page) { 
      var newData = []; 
      $.each(data, function (index, item) { 
       newData.push({ 
        id: item.Id,  //id part present in data 
        text: item.Name //string to be displayed 
       }); 
      }); 
      return { results: newData }; 
     }, 
     cache: true 
    }, 
    escapeMarkup: function (markup) { return markup; }, // let our custom formatter work 
    minimumInputLength: 0, //for listing all, set : 0 
    maximumInputLength: 20, // only allow terms up to 20 characters long 
}); 

回答

0

==============================解决== ============================

这是问题的解决方案:

为了送Select2中的文本值通过AJAX使用params.ter如下所示,在数据部分输入m。非常感谢@DavidDomain,因为他的回答对于使用选定的索引更改也非常有用。

//code omitted for brevity 
data: function (params) { 
    return { 
      query: params.term, // search term 
      page: params.page 
      }; 
    }, 
... 
1

您可以简单地收听select2:select事件以获取选定的项目。

Events

SELECT2:选择

每当选择了结果触发。

var select2 = $(".select2"); 
 

 
select2.select2({ 
 
    multiple: false, 
 
    placeholder: "Select", 
 
    allowClear: true, 
 
    tags: true, 
 
    width: "180" 
 
}); 
 

 
function onSelect(evt) { 
 
    console.log($(this).val()); 
 
} 
 

 
select2.on('select2:select', onSelect)
@import url('https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script> 
 

 
<select class="select2"> 
 
    <option value="item-1">Item 1</option> 
 
    <option value="item-2">Item 2</option> 
 
    <option value="item-3">Item 3</option> 
 
    <option value="item-4">Item 4</option> 
 
    <option value="item-5">Item 5</option> 
 
    <option value="item-6">Item 6</option> 
 
    <option value="item-7">Item 7</option> 
 
    <option value="item-8">Item 8</option> 
 
    <option value="item-9">Item 9</option> 
 
    <option value="item-10">Item 10</option> 
 
</select>

+0

非常感谢您的完美答案。我错过了一些东西,无法获得AJAX中** data **部分的选定值。我怎么能在那里抓到它? –

+0

我创建了一个变量var selectedText =“”;然后在函数onSelect(evt){}中设置** selectedText = $(this).val(); **然后尝试将此值分配给数据部分中的** query:selectedText **,但不能设置查询参数。任何想法? –

+0

所以你想将输入文本作为参数传递给ajax调用? – DavidDomain