2017-02-15 5 views
1

У меня есть сценарий, где мне нужно выбрать значение drop на основе querystring.Выберите Dropdown, основанный на частичном значении в поле выпадающего значения

Строка запроса может быть как q=c-1q=c-2q=p-5

и значение в раскрывающемся списке может быть value="8-P-5"value="5-G-0"value="7-P-7"

Как я могу выбрать выпадающее значение на основе строки запроса

Is это возможно сделать из Code-behind C# или jquery - это простое решение.

<select name="ctl00$ContentPlaceHolder1$ddlOptionGroup" id="ContentPlaceHolder1_ddlOptionGroup" class="form-control"> 
    <option value="1-C-1">Item 1</option> 
    <option value="4-C-2">Item 2</option> 
    <option value="5-G-0">Item 3</option> 
    <option value="7-P-7">Item 4</option> 
    <option value="8-P-5">Item 5</option> 
    <option value="10-C-4">Item 6</option> 
    <option value="3-P-0">Item 7</option> 
    <option value="2-P-0">Item 8</option> 
    <option value="6-G-0">Item 9</option> 

</select> 

Если запрос-строка q=c-2, то это должно быть выбрано <option value="4-C-2" selected>Item 2</option>

+0

Ваши вопросы кажется неясным .. Могли бы вы пожалуйста, объясните, как именно вы пытаетесь сопоставить значение querystring и параметр в меню выбора? –

+0

Со второй страницы я передаю значение как строку запроса 'q = c-2', а на другой странице я должен предварительно выбрать раскрывающийся список, который частично соответствует строке запроса. У меня есть страница страницы и проекта, и идентификатор из них может быть таким же, чтобы предварительно выбрать элемент в раскрывающемся списке, который я префиксны с помощью C & P, C для категории & P для проекта – Learning

+0

Итак, в любом случае ' значение 'в' options' будет уникальным? –

ответ

7

Если вы открыты для решения JavaScript/JQuery вы можете взять window.location.search, а затем использовать селектор JQuery, чтобы найти вариант, основанный на a contains условие в конкретном теге select.

Обратите внимание, что это означает, что значение, которое приходит в вашем q, уникально идентифицируется в свойстве value вашего выбранного элемента. В вашем текущем наборе данных будет соответствовать как элемент 7, так и позиция 8. Поскольку вы не предоставили бизнес-правило для этого случая, я оставил это здесь нетронутым.

Вот отрывок, которые демонстрируют это:

// use window.location.search 
 
var search = '?q=p-5'; // window.location.search; 
 
// handle possible search for this value ?foo=bar&q=p-5#fragment 
 
var parms = search.substr(1).split('&'); 
 
for(var i=0; i< parms.length;i++) 
 
{ 
 
    var keyValue= parms[i].split('='); 
 
    if (keyValue[0] === "q" && keyValue.length > 0) { 
 
    var value = keyValue[1].split('#'); 
 
    $('select > option[value*="' + value[0].toUpperCase() + '"]').prop('selected',true); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select name="ctl00$ContentPlaceHolder1$ddlOptionGroup" id="ContentPlaceHolder1_ddlOptionGroup" class="form-control"> 
 
    <option value="1-C-1">Item 1</option> 
 
    <option value="4-C-2">Item 2</option> 
 
    <option value="5-G-0">Item 3</option> 
 
    <option value="7-P-7">Item 4</option> 
 
    <option value="8-P-5">Item 5</option> 
 
    <option value="10-C-4">Item 6</option> 
 
    <option value="3-P-0">Item 7</option> 
 
    <option value="2-P-0">Item 8</option> 
 
    <option value="6-G-0">Item 9</option> 
 

 
</select>

+0

Этот отличный ответ – Learning

+1

@Learning @rene Это выберет опцию '2-P-0' для'? Q = p-0'. Другими словами, опция, имеющая значение '3-P-0' (элемент 7), никогда не будет выбрана. – Tushar

+1

@Tushar да, это зависит от OP, как они хотят разрешить этот сценарий. В конце концов, их жизнь будет намного проще, если значение, которое находится в строке запроса, действительно точно соответствует значению в параметрах. Предоставление частичного ключа может дать вам наилучший результат. Если есть бизнес-логика, которая может определить, когда выбрать один над другим, который нужно добавить. Я расширил свой ответ, чтобы уведомить посетителей об этой проблеме. – rene

1
for (int i = DropDownList1.Items.Count-1; i >0 ; i--) 
     { 
      if (DropDownList1.Items[i].Value.Contains("C-2")) 
      { 
       DropDownList1.Items[i].Selected = true; 
       break; 
      } 
     } 

или вы можете сделать это с помощью синтаксиса Linq

DropDownList1.Items.Cast<ListItem>() 
        .Where(x => x.Value.Contains("C-2")) 
        .LastOrDefault().Selected = true; 
Смежные вопросы