MVC 4 Razor - 创建动态 DropDownList

2024-01-30

我正在尝试创建一个具有两个 DropDownList 的视图。第二个 DropDownList 中的可用选项取决于用户在第一个 DropDownList 中选择的选项。我将此数据传递到 ViewBag 中的视图,如下所示:

   List<SelectListItem> firstBoxChoices =  ViewBag.firstBoxChoices;
   Dictionary<string, List<SelectListItem>> secondBoxDict = ViewBag.secondBoxDict;

第一个对象具有第一个 DropDownList 的选项。当用户选择其中之一时,我需要从我的词典中获取第二个 DropDownList 的适当选项列表。我只是不知道如何实现这一目标。如果我在 Javascript onchange() 函数中获得第一个 DropDownList 的新选择,则似乎没有任何方法可以使用该值作为我的 C# 字典的键。

当然,我在网上看到过这个功能,所以我知道它一定是可能的。我怎样才能实现这个目标?

Thanks!


有几种方法可以做到这一点,而不强迫您在模型中存储所有可能的数据项,我更喜欢使用 Javascript/JQuery。以下是国家/州级联下拉列表的示例:

当选择一个国家/地区时,Javascript 用于获取状态:

<script type="text/javascript">
    function AppendUrlParamTokens(url, params) {

        for (var param in params) {
            if (params[param] == null) {
                delete params[param];
            }
        }

        return url + "?" + jQuery.param(params);
    }

    function OnCountriesChange(ddl) {
        jQuery.getJSON(AppendUrlParamTokens('@Url.Action("GetStates", "Data")', { countryId: ddl.options[ddl.selectedIndex].value }), function (result) {
            var target = jQuery('#states_ddl');
            target.empty();
            jQuery(result).each(function() {
                jQuery(document.createElement('option'))
                    .attr('value', this.Value)
                    .text(this.Text)
                    .appendTo(target);
            });
        });
    };
</script>

国家/地区下拉列表:

@Html.DropDownListFor(model => model.Country, new SelectList(Model.Countries, "Value", "Text", Model.PreviousCountrySelected), "(Select One)", new { id = "countries_ddl", onchange = "OnCountriesChange(this)" })

状态下拉列表:

Html.DropDownListFor(model => model.State,
                              Model.States != null
                                       ? new SelectList(Model.States, "Value", "Text", Model.PreviousStateSelected)
                                       : new SelectList(new List<SelectListItem>(), "Value", "Text"),
                              new { id = "states_ddl" })

检索状态的控制器方法:

public ActionResult GetStates(short? countryId)
{
    if (!countryId.HasValue)
    {
        return Json(new List<object>(), JsonRequestBehavior.AllowGet);
    }

    var data = GetAllStatesForCountry(countryId.Value).Select(o => new { Text = o.StateName, Value = o.StateId });

    return Json(data, JsonRequestBehavior.AllowGet);
}

这个想法是,在选择下拉菜单 1 时,您使用 ajax 来检索第二个下拉菜单的值。

Edit:忘记包含构建 url 的实用方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC 4 Razor - 创建动态 DropDownList 的相关文章

随机推荐

  • 谁在 BPF 中创建地图

    看完之后man bpf以及其他一些文档来源 我的印象是map只能由用户进程创建 然而下面这个小程序似乎神奇地 create bpf map struct bpf map def SEC maps my map type BPF MAP TY
  • Docker compose 运行yarn install

    运行该步骤时运行纱线安装在 docker compose build 命令期间的 Dockerfile 中 我得到 1 4 正在解析包 2 4 正在获取包 信息 电子邮件受保护 cdn cgi l email protection 平台 l
  • 在终端中使用 cURL 发布数组

    我正在尝试为应用程序构建网络服务 因此数据存储在我拥有的在线数据库中 我目前正在构建 php 文档 我很好奇如何才能POST an array using cURL in the 终端 Mac 应用程序 您会看到 应用程序将向 Web 服务
  • Firestore - 按降序排序

    在我的 Firestore 数据库中 我有字段索引 no 数据类型是字符串 但数据是数字 如 1 2 3 等 collectionReference orderBy indexNo Query Direction DESCENDING 到9
  • OpenSSL 作为 CA,无需触及 certs/crl/index/etc 环境

    我认为我有正确的 OpenSSL 命令来签署证书 但我陷入了困境 并且我发现的教程使用了不同的参数格式 我使用的是 OpenSSL 0 9 8o 01 Jun 2010 openssl ca cert cert pem keyfile ke
  • Azure DocumentDB 性能缓慢

    我目前面临 Azure DocumentDB 的响应时间相当慢 第一次尝试 集合中有 31 个对象 我将获取这些对象并将其返回给调用者 我正在使用的代码是这样的 public async Task
  • Clojure 中的原子文件替换

    我有一个可以写入更新磁盘文件的应用程序 但我想尽可能确保文件的先前版本不会损坏 当然 更新文件最直接的方法就是简单地编写 spit myfile txt mystring 但是 如果 PC 或 java 进程 在写入过程中死机 则有很小的机
  • 检索 HTML 元素的位置 (X,Y)

    我想知道如何获取 HTML 元素的 X 和 Y 位置 例如img and div在 JavaScript 中 正确的方法是使用element getBoundingClientRect https developer mozilla org
  • 无法在多线程的正确文件上写入日志?

    我已发布问题 如何使用java在多线程中使用log4j https stackoverflow com questions 8226615 how to use log4j in multithread using java 我得到了回复
  • 避免在 JavaScript 中转义特殊字符

    我的服务器返回值为support testing 当我在客户端获得这个值时 它可以被转义为support testing t作为制表符空格转义 如何避免在 JavaScript 中转义特殊字符 您的服务器需要使用正确的转义来输出字符串 在这
  • 如何有效地发送大数据包/合并较小的数据包?

    我有一个更大的缓冲区 我试图作为数据包发送 Nodejs 将缓冲区分割成更小的 65k 数据包 一旦客户端收到它们 我如何确保数据包组合在一起并有效地将它们重新组合到缓冲区中 几乎用这个作为测试 tcp socket var buf Buf
  • HTTP 400 的 Spring MVC 自定义消息

    我有几个像下面这样的 SprigMVC 方法 返回 ModelAndView 或 Responsebody 当用户向这些缺少所需参数的网址发出请求时 他们自然会收到消息 所需的字符串参数 id 不存在 从安全角度来看我想隐藏此详细描述消息来
  • Python 获得正确的行结尾

    有没有一种简单的方法来获取当前操作系统使用的行结束类型 如果您正在操作以文本模式打开的文件 那么换行符全部显示为 是正确的 n 否则 您正在寻找os linesep http docs python org library os html
  • 是否可以用 ISO 8601 表示开放式时间间隔?

    ISO 8601 包括几种表示方法时间间隔 https en wikipedia org wiki ISO 8601 Time intervals 开始 结束 开始 持续时间 持续时间 结束 duration 例如 1990 1999是一个
  • 为什么 XmlDocument 在 .NET 4 中不是动态的?

    我希望看到使用的领域之一dynamic是XML 我认为这将使 XML 处理代码编写起来更简单 并且我相信在 C 4 出现之前我看到了一些示例 并且提到了它在这个答案中 https stackoverflow com questions 22
  • 使用单个指针访问二维数组

    像这样的代码有很多 include
  • 无法编译使用 std::io 的代码 - `std::io` 中没有 `File`

    我对 Rust 还很陌生 我只是想通过从文本文件中执行基本的逐行读取来熟悉 io 库 我试图编译的示例直接来自网站 use std io BufferedReader use std io File fn main let path Pat
  • 将 Heroku Postgres 连接到 PowerBI

    我希望将 Heroku PostgresSQL 直接连接到 PowerBI Desktop 看起来市场上有几种产品可以从 Heroku 复制到 Azure 但希望直接连接到 PowerBI 有人能够做到这一点吗 如果有一个替代数据库选项可与
  • selectInput 选择显示标签中闪亮的额外空白

    我正在使用闪亮的 selectInput 并且在我的选择的下拉菜单中我想要在一些单词之间有多个空格 但仅包含空格不会显示 应用程序中最多有 1 个空格 例如 在下面的代码示例中 Cylinder 和 I 之间有多个空格 但是如果运行此命令
  • MVC 4 Razor - 创建动态 DropDownList

    我正在尝试创建一个具有两个 DropDownList 的视图 第二个 DropDownList 中的可用选项取决于用户在第一个 DropDownList 中选择的选项 我将此数据传递到 ViewBag 中的视图 如下所示 List