2010-08-17 1 views
1

Я пытаюсь создать список выбора, который будет содержать некоторые приоритетные значения, затем разделитель, а затем остальные значения. Мне нужно сделать это в Html Helper, так как я получу значения, которые будут приоритетными, и остальные значения из разных источников.Создать Selectlist с разделителем в Html Helper

Пример того, что я хочу сделать:

EUR 
GBP 
USD 
--- 
SEK 
ZAR 
. 
. 
. 

Я также хочу убедиться, что разделитель нельзя выбрать. Если я сделаю это прямо в html, мне это удастся, но я не могу отключить разделитель, когда делаю это через помощника. Есть идеи, как это сделать?

+0

Когда опция выдается, ее можно выбрать. Стандартный по умолчанию простой выпадающий элемент HTML очень ограничен в своих опциях. Вам придется прибегнуть к некоторому JavaScript для предотвращения выбора клиентов, но я не знаю о таком сценарии - просто указывая вам в возможном направлении. – mare

+0

Я думаю, вам придётся поправить своего помощника, чтобы делать то, что вы хотите ... – Scrappydog

+0

Или просто объедините два источника значений с разделителем и добавьте JavaScript-вызов к «onchange», как «new with {.onchange = "MyJSFunction"}, который проверяет разделитель и отменяет изменение. – OlafW

ответ

5

В результате я создал метод html helper, который принимает мой два списка, и для каждого элемента создается новый тег типа «option» и добавляется в список выбора. Таким образом, я могу добавить атрибуты, такие как «disabled =» disabled »и т. Д.

Это не опрятно, это не аккуратно. Честно говоря, это отвратительный код, и я хотел бы, чтобы у него был лучший способ сделать это. Тем не менее, на данный момент не хватает времени, чтобы завершить свою задачу, поэтому в конечном итоге делает это так:

var fullList = new StringBuilder(); 

var selectList = new TagBuilder("select"); 
selectList.Attributes.Add("name", "currencies"); 
selectList.Attributes.Add("id", "selectCurrency"); 

foreach (var currency in currencies) 
{ 
    var option = new TagBuilder("option") {InnerHtml = currency.Id}; 
    option.Attributes.Add("value", currency.Id); 
    fullList.AppendLine(option.ToString()); 
} 

var separator = new TagBuilder("option") { InnerHtml = "-------" }; 
separator.Attributes.Add("disabled", "disabled"); 
fullList.AppendLine(separator.ToString()); 

selectList.InnerHtml = fullList.ToString(); 

Если у вас есть лучший способ, пожалуйста, дайте мне знать, и я мог бы вернуться к этой задачи позже для некоторого рефакторинга, и хотел бы иметь хороший способ сделать это тогда.