带有自定义参数的 Html.DropDownListFor()

2024-04-06

我想在 HTML 帮助程序中添加扩展方法来生成这样的选择和选项

<select id="Country" name="Country">
<option data-domain="AN" value="1">Andorra</option>
<option data-domain="UI" value="2">United Arab Emirates</option>
<option data-domain="AF" value="3">Afghanistan</option>

这些选项有一个数据域属性,我可以这样使用它

@Html.DropDownListFor(m => m.Country, Model.CountryList)

the Model.CountryList是国家/地区变量的数组

class Country
{
    public String Text { get; set; }
    public String Value { get; set; }
    public String Domain { get; set; }
}

请问谁能给出解决方案


您可以建立您的CustomDropdownListFor在自定义帮助器方法的帮助下,如下所示:

自定义辅助方法:

public static class CustomHelpers
{    
    public class CustomSelectItem : SelectListItem
    {           
        public string Class { get; set; } 
        public string Disabled { get; set; }
        public string SelectedValue { get; set; }
    }
    
    public static MvcHtmlString CustomDropdownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<CustomSelectItem> list, string selectedValue, string optionLabel, object htmlAttributes = null)
    {
        if (expression == null)
        {
            throw new ArgumentNullException("expression");
        }
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData);
        string name = ExpressionHelper.GetExpressionText((LambdaExpression)expression);
        return CustomDropdownList(htmlHelper, metadata, name, optionLabel, list, selectedValue, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
    }

    private static MvcHtmlString CustomDropdownList(this HtmlHelper htmlHelper, ModelMetadata metadata, string name, string optionLabel, IEnumerable<CustomSelectItem> list, string selectedValue, IDictionary<string, object> htmlAttributes)
    {
        string fullName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
        if (String.IsNullOrEmpty(fullName))
        {
            throw new ArgumentException("name");
        }

        TagBuilder dropdown = new TagBuilder("select");
        dropdown.Attributes.Add("name", fullName);
        dropdown.MergeAttribute("data-val", "true");
        dropdown.MergeAttribute("data-val-required", "Mandatory field.");
        dropdown.MergeAttribute("data-val-number", "The field must be a number.");          
        dropdown.MergeAttributes(htmlAttributes); //dropdown.MergeAttributes(new RouteValueDictionary(htmlAttributes));
        dropdown.MergeAttributes(htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata)); 

        StringBuilder options = new StringBuilder();

        // Make optionLabel the first item that gets rendered.
        if (optionLabel != null)
            options.Append("<option value='" + String.Empty + "'>" + optionLabel + "</option>");

        foreach (var item in list)
        {
            if (item.SelectedValue == "selected" && item.Disabled == "disabled")
                options.Append("<option value='" + item.Value + "' class='" + item.Class + "' selected='" + item.SelectedValue + "' disabled='" + item.Disabled + "'>" + item.Text + "</option>");
            else if (item.SelectedValue != "selected" && item.Disabled == "disabled")
                options.Append("<option value='" + item.Value + "' class='" + item.Class + "' disabled='" + item.Disabled + "'>" + item.Text + "</option>");
            else if (item.SelectedValue == "selected" && item.Disabled != "disabled")
                options.Append("<option value='" + item.Value + "' class='" + item.Class + "' selected='" + item.SelectedValue + "'>" + item.Text + "</option>");
            else
                options.Append("<option value='" + item.Value + "' class='" + item.Class + "'>" + item.Text + "</option>");
        }
        dropdown.InnerHtml = options.ToString();
        return MvcHtmlString.Create(dropdown.ToString(TagRenderMode.Normal));
    }
}

视图(剃刀):

@Html.CustomDropdownListFor(m => m.PersonId, ViewBag.PersonData as List<CustomHelpers.CustomSelectItem>, null, "---- Select ----", 
    new { name = "personId", id = "personId"})                   
@Html.ValidationMessageFor(m => m.PersonId, null , new { @class = "ValidationErrors" })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有自定义参数的 Html.DropDownListFor() 的相关文章

  • 悬停时为 SVG 制作动画

    我正在尝试在悬停时为 SVG 文件设置动画 默认情况下 它可以使用 svg 函数实现出色的动画效果 例如
  • 我如何将整数列表添加到路由

    我正在尝试将 int 数组添加到我的 Url Action 中 如下所示 var routeData new RouteValueDictionary for int i 0 i lt Model GroupsId Length i rou
  • HTML 默认图像大小

    我在我的代码上显示 3 张图片 图片具有不同的尺寸 宽度和高度 div class row div class col lg 12 h2 class page header Gallery h2 div div class col md 4
  • 使用自定义VirtualPathProvider加载嵌入资源部分视图

    我编写了自定义 VirtualFile 和 VirtualPathProvider 实现 它们成功获取了部分视图的嵌入式资源 但是 当我尝试渲染它们时 它会产生以下错误 The view at Succeed Web Succeed Web
  • 使用 CSS 删除不需要的表格单元格边框

    我有一个奇怪且令人沮丧的问题 对于简单的标记 table thead tr th 1 th th 2 th th 3 th tr thead tbody tr td a td td b gt td td c td tr tr class o
  • scrollWidth/scrollHeight 给出无效尺寸

    如所述https developer mozilla org en Determining the dimensions of elements https developer mozilla org en Determining the
  • ckeditor 字体样式 13 px

    我之前曾问过相关问题 但在尝试了所有发生错误的可能性之后 我发现 在ckeditor中 如果您复制一些文本并粘贴它 它默认粘贴为 p style font size 13px 示例图片 HTML CODE p div p Original
  • 用一种方法进行 Ruby 选择和拒绝

    是否有任何内置方法可以结合以下功能Enumerable select 找到该块等于 true 的所有内容 和Enumerable reject 找到该块中所有等于 false 的内容 就像是 good bad list magic meth
  • iOS Safari 通过单击按钮触发扫描信用卡

    您好 我目前正在创建一个测试应用程序 当用户单击文本字段名称或卡号时 扫描信用卡功能对我有用 我的问题是 我希望当用户单击 button1 时发生同样的情况 这应该打开相机来扫描卡并填充现有的文本字段 即名称 卡号和到期日期 额外的好处是
  • 将 div 设置为 post 方法结果页面的目标容器

    我有一个 div 标签 也分为两个 div 这是代码 div div div div
  • ASP.NET MVC3 应用程序可以在不更改特定代码的情况下托管在云中吗?

    我使用以下方法创建了一个 ASP NET Web 应用程序 ASP NET MVC 3 网络表单 Linq 到 SQL MS SQL Server 数据库 WCF 需要做什么才能将其托管在云服务上 我是否应该将其转换为 Azure 应用程序
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • 重命名 ASP.NET MVC 项目时出错

    我复制了以前的项目并将其重命名 一旦我成功重命名了所有名称空间并且它构建正确 当我运行该应用程序时 出现以下错误 The following errors occurred while attempting to load the app
  • HTML colorpicker 发生变化时如何获取新值?

    我正在开发一个需要更改 HTML 颜色的网络应用程序canvas基于的价值观colorpicker 我有一个colorpicker在我需要获取的 HTML 中value从每次更新开始
  • 默认情况下,JSF 生成不可用的 ID,这些 ID 与 Web 标准的 CSS 部分不兼容

    活跃的 JSF 或 Primefaces 用户能否解释一下为什么默认情况下会发生这种情况 为什么没有人对此采取任何措施
  • css 计数器在 Internet Explorer 中无法工作以获取隐藏内容 - 如何修复?

    我们想要一些编号列表 并发现了这个很酷的计数器 您可以在 css 中使用它来让浏览器为您计算数字 ol instructions counter reset instructions section ol instructions gt l
  • 使用 html5 分块上传文件

    我正在尝试使用 html5 的文件 API 分块上传文件 然后在服务器端用 php 重新组装它 我正在上传视频 但是当我在服务器端合并文件时 大小增加了 并且它变成了无效文件 请注意 以下 html5 代码仅适用于 chrome 浏览器 在
  • Jquery,清除/清空 tbody 元素的所有内容?

    我认为这会相当简单 但似乎空方法无法清除我拥有的 tbody 如果有人知道执行此操作的正确方法 我将不胜感激 我只想删除 tbody 中包含的所有内容 到目前为止我正在尝试 tbodyid empty HTML table tbody tr
  • gwt 中的垂直居中

    如何使用垂直面板在 gwt 中垂直居中 或者请告诉我有什么方法可以进行垂直居中 如果你想直接使用VerticalPanel从代码中 您需要使用setVerticalAlignment HasVerticalAlignment ALIGN M
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我

随机推荐

  • 改造和持久 cookie 存储

    在改造中实现持久 cookie 存储的最简单方法是什么 现在我正在使用这个 cookieManager new CookieManager cookieManager setCookiePolicy CookiePolicy ACCEPT
  • 字段列表中的 EF4 未知列

    所以 我有点难住了 我一直在使用通用存储库 它工作得很好 它位于实体框架 4 1 之上 我曾多次使用同一行代码来获取一组数据 之前没有任何问题 然而 我的数据库中的这张表似乎抛出了异常 我一生都无法弄清楚如何修复它 这是MySQL数据库中的
  • 为什么我可以在可为空的列上创建带有主键的表?

    以下代码创建一个表 不会引发任何错误 CREATE TABLE test ID INTEGER NULL CONSTRAINT PK test PRIMARY KEY ID 请注意 我无法按预期插入 NULL INSERT INTO tes
  • if constexpr 而不是标签调度

    我想用if constexpr而不是标签调度 但我不知道如何使用它 下面的示例代码 template
  • 使用 argdo 打开多个文件时,vim 中未打开语法突出显示

    我经常从 MacVim 中一次打开整组文件 为此 我通常使用以下命令 args PATTERN argdo tabedit 这会将工作目录中与模式匹配的所有文件加载到参数列表中 然后在单独的选项卡中将它们全部打开 当我执行此操作时 语法突出
  • Django 日志:记录到文件的任何教程

    我正在开发一个 django 项目 但还没有开始 从事该项目的开发人员离开了 在知识转移过程中 有人告诉我所有事件都记录到数据库中 我发现数据库接口对于搜索日志没有用处 有时它们甚至不记录 我可能是错的 我想知道是否有一个简单的教程来解释如
  • 无法循环文件名中带有空格的文件、Windows 批处理文件和图像 magick

    我正在尝试循环一堆文件夹 创建子文件夹 然后循环文件 使用 imagemagick 转换它们并将它们放入新的子文件夹中并重命名 某些文件名称中包含空格并导致错误 我该如何解决此问题 错误信息 convert unable to open i
  • Magento - 如何创建“十进制”属性类型

    我在网上做了一些搜索 但还没有找到这个问题的任何答案 我遇到的情况是 我需要一个十进制值的产品属性 它必须支持负数和正数 并且还必须可排序 由于某种原因 Magento 没有 十进制 属性类型 唯一使用小数值的类型是 Price 但不支持负
  • C++中可以使用字典吗

    我一直在查找 C 中的字典 它们似乎非常有用 并且想知道是否可以在 C 中使用它们 因为我尝试在 C 中搜索字典 但似乎没有与我相同的字典可以找到 是否有某种类型的库可以下载并包含到项目中 或者是否有一个函数可以用不同的名称执行相同的操作
  • Ruby on Rails:跳过种子的“validate_on_create”语句

    我的一个控制器中有一个 validate on create 语句 我希望跳过所有种子数据 有哪些解决方案可以使我的种子文件中的 create 语句跳过此验证 我当前的解决方案是每次运行 rake db seed 时注释掉验证 还有更聪明一
  • Haskell 中的 xor 和 or 有什么区别

    So if xor回报True当且仅当其操作数之一恰好是True这样 xor Bool gt Bool gt Bool xor True True False xor True False True xor False True True
  • 模板函数中的输出向量

    这一段代码报错 template
  • 来自 Unity 配置文件的 RegisterType

    我正在从 Prism 4 迁移到 Prism 7 1 我似乎找不到已从最新 Prism 版本中删除的ConfigureContainer 方法 过去 我曾使用这种方法从文件系统加载Unity配置 对于最新版本的 Prism 库 这似乎是不可
  • isdigit 无法正常工作

    我试图通过迭代整个字符串并输出整数来测试字符串是否包含整数 我的方法涉及将字符串转换为 c string atoic 字符串 然后使用测试它是否是整数isdigit功能 由于某种未知的原因 isdigit尽管函数遇到整数 但它返回 fals
  • 如何选择要在 Ruby 中动态包含的模块版本?

    我正在编写一个小型 Rub y 命令行应用程序 它使用fileutils来自文件操作的标准库 根据用户调用应用程序的方式 我想包括FileUtils FileUtils DryRun or FileUtils Verbose Since i
  • ggplot2:在右侧为一个变量创建第二个 y 轴

    我有一个数据框 在同一时间范围内包含 3 个不同的变量 前两个变量具有相同的比例 股票指数值 可以用 y 轴来说明 第三个变量是利率 范围仅为 0 到 7 因此我专注于在图的右侧创建一个额外的 y 轴来说明它 但经过两天的尝试和失败后 我在
  • 使用powershell获取csv文件中的特定单元格值

    我是 powershell 的新手 不经常使用它 我需要使用 powershell 从 csv 文件输出单元格 A5 的值 我的文件 col1 col2 col3 col4 1002 1005 1006 1007 需要 A1 单元格中的值
  • 无法使用 getDeclaredFields() 检索 Scala 类的字段

    我正在尝试将 Java 库 JOhm 与 Scala 一起使用 并注意到当该库尝试使用以下内容读取我的 Scala 类的字段时它会失败model getClass getDeclaredFields 然后我决定尝试在 Scala 解释器中用
  • 如何在输入按钮中的访问键下划线

    我有一个按钮 我想在访问密钥字母下划线 u u 不起作用 并且C 818 C 改变字体 应该是verdana
  • 带有自定义参数的 Html.DropDownListFor()

    我想在 HTML 帮助程序中添加扩展方法来生成这样的选择和选项