Подтвердить что ты не робот

SelectListItem с атрибутами данных

Есть ли в любом случае, чтобы SelectList был предварительно добавлен в ViewModel с атрибутами данных?

Я хочу сделать

@Html.DropdownListFor(m=> m.CityId, Model.Cities);

поэтому он генерирует код типа:

<select id="City" class="location_city_input" name="City">
    <option data-geo-lat="-32.522779" data-geo-lng="-55.765835" data-geo-zoom="6" />
    <option data-geo-lat="-34.883611" data-geo-lng="-56.181944" data-geo-zoom="13" data-geo-name="Montevideo" data-child=".state1" value="1">Montevideo</option>               
    <option data-geo-lat="-34.816667" data-geo-lng="-55.95" data-geo-zoom="13" data-geo-name="Canelones, Ciudad de la Costa" data-child=".state41" value="41">Ciudad de la Costa</option>
</select>
4b9b3361

Ответ 1

Здесь простое решение.

Не все должно быть написано с помощью метода расширения в коде .NET. Одна из замечательных особенностей MVC - это легкий доступ к созданию собственного HTML.

С MVC4 вы можете получить идентификатор и имя элемента в дереве выражений с помощью помощников HTML.NameFor и HTML.IdFor

<select name="@Html.NameFor(Function(model) model.CityId)"
        id="@Html.IdFor(Function(model) model.CityId)"
        class="location_city_input">
    @For Each city In Model.Cities
        @<option value="@city.Value"
                 @(If(city.Value = Model.CityId, "selected", ""))
                 data-geo-lat="@city.Lat"
                 data-geo-lng="@city.Lng"
                 data-geo-zoom="@city.Zoom">
            @city.Text
        </option>
    Next
</select>

Предполагая, что Model.Cities представляет собой набор элементов, которые выставляют каждое из этих свойств. Тогда вы должны быть настроены.

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