Я сделал опцию поиска на моем сайте, используя Select2 с настраиваемым списком, все работает нормально, проблема в том, что всегда отображается первая выбранная опция, и я хочу показать текущую опцию.
Использовал этоссылка, чтобы сделать опции Select2 clickable: Прикрепить событие клика к элементу в .select2-result
В контроллере:
public ActionResult Real_Estate(string Tipo_Imovel_Search, string Localizacao_Search, string Tipologia_Search, string PrecoFrom, string PrecoTo, string AreaFrom, string AreaTo, string sortOrder, int? page)
{
//Create List of RealEstateAllViewModel and fill it depend on searching strings
var ApartmentsModel = new RealEstateAllViewModel();
var ApartmentsList = ApartmentsModel.GetRegistos(Tipo_Imovel_Search, Localizacao_Search, Tipologia_Search, PrecoFrom, PrecoTo, AreaFrom, AreaTo);
//sorting
//Saved current sort variable for Paging List do not lose sorting in second page
ViewBag.CurrentSort = sortOrder;
switch (sortOrder)
{
case "preco_asc":
ApartmentsList = ApartmentsList.OrderBy(s => s.Preco).ToList();
break;
case "preco_desc":
ApartmentsList = ApartmentsList.OrderByDescending(s => s.Preco).ToList();
break;
case "area":
ApartmentsList = ApartmentsList.OrderBy(s => s.Area_util).ToList();
break;
В представлении:
<div class="container">
<div class="row">
<div class="col-12">
@*select order list*@
<select class="search">
<option value="@Url.Action("Real_Estate", "Apartamentos", new { sortOrder = "preco_asc", Tipo_Imovel_Search = Request.QueryString["Tipo_Imovel_Search"], Localizacao_Search = Request.QueryString["Localizacao_Search"], Tipologia_Search = Request.QueryString["Tipologia_Search"], PrecoFrom = Request.QueryString["PrecoFrom"], PrecoTo = Request.QueryString["PrecoTo"], AreaFrom = Request.QueryString["AreaFrom"], AreaTo = Request.QueryString["AreaTo"] })">
Preço (crescente)
</option>
<option value="@Url.Action("Real_Estate", "Apartamentos", new { sortOrder = "preco_desc", Tipo_Imovel_Search = Request.QueryString["Tipo_Imovel_Search"], Localizacao_Search = Request.QueryString["Localizacao_Search"], Tipologia_Search = Request.QueryString["Tipologia_Search"], PrecoFrom = Request.QueryString["PrecoFrom"], PrecoTo = Request.QueryString["PrecoTo"], AreaFrom = Request.QueryString["AreaFrom"], AreaTo = Request.QueryString["AreaTo"] })">
Preço (decrescente)
</option>
<option value="@Url.Action("Real_Estate", "Apartamentos", new { sortOrder = "area", Tipo_Imovel_Search = Request.QueryString["Tipo_Imovel_Search"], Localizacao_Search = Request.QueryString["Localizacao_Search"], Tipologia_Search = Request.QueryString["Tipologia_Search"], PrecoFrom = Request.QueryString["PrecoFrom"], PrecoTo = Request.QueryString["PrecoTo"], AreaFrom = Request.QueryString["AreaFrom"], AreaTo = Request.QueryString["AreaTo"] })">
Área (crescente)
</option>
<option value="@Url.Action("Real_Estate", "Apartamentos", new { sortOrder = "area_desc", Tipo_Imovel_Search = Request.QueryString["Tipo_Imovel_Search"], Localizacao_Search = Request.QueryString["Localizacao_Search"], Tipologia_Search = Request.QueryString["Tipologia_Search"], PrecoFrom = Request.QueryString["PrecoFrom"], PrecoTo = Request.QueryString["PrecoTo"], AreaFrom = Request.QueryString["AreaFrom"], AreaTo = Request.QueryString["AreaTo"] })">
Área (decrescente)
</option>
</select>
</div>
</div>
</div>
Javascript:
$(".search").select2({
language: "pt",
minimumResultsForSearch: Infinity, //remove search box from single list
templateResult: function (data) {
if (data.id == null) {
return data.text;
}
//used for allow click href in list
var $listoption = $("<a>" + data.text + "</a > ");
$listoption.prop("href", data.id);
$listoption.on('mouseup', function (evt) {
evt.stopPropagation();
});
return $listoption;
}
});
Все работает просто отлично: изменение URL зависит от строки поиска: http://localhost:41350/pt/Apartamentos/Real_Estate?sortOrder=preco_asc
Контроллер возвращает правый упорядоченный список
проблема в том, что всегда показывать выбранную первую опцию, и я хочу показать текущую опцию.
Как я могу это сделать?
Пожалуйста, помогите, я новичок в JavaScript.Спасибо.