asp.net-mvc - 具有数据属性的 SelectListItem

标签 asp.net-mvc html html-helper custom-data-attribute selectlist

有没有办法在 ViewModel 上预填充带有数据属性的 SelectList?

我想做

@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>

最佳答案

这是简单的解决方案。

并非所有内容都必须在 .NET 代码中使用扩展方法编写。 MVC 的一大优点是它使您可以轻松访问以构建您自己的 HTML。

使用 MVC4,您可以使用助手 HTML.NameFor 获取表达式树上元素的 ID 和名称。和 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 是一个公开每个属性的项的集合。那么你应该都准备好了。

如果您想要可重用性,请考虑将其作为任何可枚举城市的编辑器模板

关于asp.net-mvc - 具有数据属性的 SelectListItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17665426/

相关文章:

javascript - 我可以用 JavaScript 影响 CSS 吗?

ruby-on-rails - 如何使用 rails 3 显示路径在我的 Ruby on Rails 项目目录之外的图像?

asp.net-mvc-3 - HtmlHelper 和 htmlAttributes 帮助

asp.net-mvc - 如何在回发之间维护对象?

c# - ASP.NET MVC Web 应用程序中基于队列的后台处理

c# - 发布到其他人的 Azure 订阅?

css - 在使用 Razor 的 MVC 4 中,在 Microsoft 提供的用于更改文本框和下拉列表样式的默认 css(site.css) 中找不到类

JavaScript 打开窗口

javascript - 如何在 Jquery 中选择 html 元素的特定实例?

asp.net-mvc - 自定义HtmlHelper呈现文本而不是标记