如何创建级联下拉列表

2024-03-07

我有两个用于过滤目的的下拉列表。如何将此下拉列表更改为 catchcadaing 下拉列表

 public ActionResult Index()
    {
        REFINED_DBEntities db = new REFINED_DBEntities();
        ViewBag.Subdivision =
            new SelectList(db.Retention_Model_Predictions_DS_Manual.Select(m => m.Subdivision).Distinct().OrderBy(c=>c.ToUpper()),

            "Subdivision");

        ViewBag.UnderwriterName =
            new SelectList(db.Retention_Model_Predictions_DS_Manual.Select(m => m.Underwriter_Name).Distinct(),

                "Underwriter_Name");
        return View();
    }

HTML 视图

<div class="form-group ">
    @Html.DropDownList("Subdivision", (IEnumerable<SelectListItem>)ViewBag.Subdivision, "Select Region", new { @class = "form-control", @id = "subDivision" })

</div>

<div class="form-group ">
    @Html.DropDownList("Underwriter_Name", (IEnumerable<SelectListItem>)ViewBag.UnderwriterName, "Select Underwriter", new { @class = "form-control", @id = "uwriter" })
</div>

级联下拉列表的想法是,您在第一个下拉列表中选择一个值,它会触发一些操作来加载第二个下拉列表的选项。一个典型的例子是国家下拉菜单和州下拉菜单。每次用户选择一个国家/地区时,国家/地区下拉列表都应更新为该国家/地区下的州。

我将为您提供一个非常通用的国家/地区用例示例。您可以使用相同的概念来构建您的特定用例

首先,为您的视图创建一个视图模型。创建类型的属性List<SelectListItem>用于传递构建 SELECT 元素所需的选项列表以及存储所选选项值的另一个属性。我们将为两个 SELECT 元素执行此操作。

public class CreateUserVm
{
   public List<SelectListItem> Countries { set;get;}
   public int SelectedCountryId { set;get;}

   public List<SelectListItem> States { set;get;}
   public int SelectedStateId { set;get;}  

   public CreateUserVm()
   {
     this.Countries = new List<SelectListItem>();
     this.States = new List<SelectListItem>();
   }  
}

现在,在 GET 操作方法中,创建此视图模型的对象,初始化第一个下拉菜单的选项,在本例中为Countries属性并将其发送到视图。

public ActionResult Create()
{ 
    var vm=new CreateUserVm();
    vm.Countries = GetCountries();
    return View(vm);
}
private List<SelectListItem> GetCountries()
{
    var list = new List<SelectListItem>
    {
        new SelectListItem() {Value = "1", Text = "USA"},
        new SelectListItem() {Value = "2", Text = "India"},
    };
    return list;
}

现在在您的视图中,它是我们视图模型的强类型。我们将使用DropDownListFor渲染下拉列表的辅助方法

@model CreateUserVm
@using (Html.BeginForm("Index", "Home"))
{
   @Html.DropDownListFor(a=>a.SelectedCountryId,Model.Countries,"Select one")
   @Html.DropDownListFor(a => a.SelectedStateId, Model.States, "Select one",
                                              new { data_url = Url.Action("GetStates") })
   <input type="Submit" />
}

这将呈现 2 个下拉菜单,其中一个带有Country选项,第二个将为空(因为我们没有加载任何内容到States财产)。现在我们将有一些 javascript(我们在这里使用 jquery 来轻松操作 DOM),它将监听change第一个下拉菜单(国家/地区)的事件,读取所选值并对GetStates方法并传递所选国家/地区选项值。

您可以看到,我为第二个下拉列表设置了 html5 数据属性,其中我将 url 存储到GetStates方法。因此,在我的 javascript 中,我可以简单地读取此数据属性值并调用该 url 来获取数据。

$(function () {
    $("#SelectedCountryId").change(function () {
        var v = $(this).val();
        var url = $("#SelectedStateId").data("url") + '?countryId=' + v;
        var $states = $("#SelectedStateId");
        $.getJSON(url, function (states) {
                $states.empty();
                $.each(states, function (i, item) {
                    $states.append($("<option>").text(item.Text).val(item.Value));
                });
            });    
    });
});

现在,让我们添加一个GetStates接受的动作方法countryId并在列表中返回该国家/地区的州SelectListItem作为 JSON 数组。

public ActionResult GetStates(int countryId)
{
    var states = new List<SelectListItem>();
    if (countryId == 1)
    {
        states.Add(new SelectListItem() {Value = "101", Text = "Michigan"});
        states.Add(new SelectListItem() { Value = "102", Text = "New York" });
    }
    else if (countryId == 2)
    {
        states.Add(new SelectListItem() { Value = "103", Text = "Kerala" });
        states.Add(new SelectListItem() { Value = "104", Text = "Goa" });

    }
    return Json(states, JsonRequestBehavior.AllowGet);
}

在这里,我对国家和州进行了硬编码。但是,如果您的数据库包含此数据,请将硬编码值替换为表中的数据。

当您编辑记录时,您所要做的就是加载States基于保存的 CountryId 的 GET 操作中的属性。

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

如何创建级联下拉列表 的相关文章

  • 具有 yaxis max 属性的 Highcharts 不会隐藏绘图带和标签

    我创建了两个 jsfiddle 来演示我的问题 第一个 jsfiddle 是我需要的 第二个 jsfiddle 是我遇到的问题 这个jsfiddle https jsfiddle net n5ua6krj 1 https jsfiddle
  • 使用 fancybox 显示内容,就像 Javascript 警报一样

    我尝试在 fancybox 中显示 PHP 文件的内容 但我无法处理它 现在是这样的情况 如果出现文件权限问题 div 网站上显示 我想要的内容来自 div 在花式盒子里 我尝试的所有操作都会收到通知 无法加载请求的内容 请稍后再试 这意味
  • 存储在 Session 中的变量在整个页面生命周期中是否反序列化一次或多次?

    我想以类似的方式包装会话变量在 CodeProject 上讨论 http www codeproject com KB aspnet wrapthosesessionvariables aspx msg 2315287 public sta
  • jQuery 位置 DIV 固定在滚动顶部

    我有一个相当长的页面 在布局的菜单中 有一个弹出菜单 我希望菜单的弹出部分显示在页面顶部 即使用户已将菜单栏滚动到视图之外 这是菜单的 HTML div div Compare up to 3 cards side by side Clic
  • 使用 setAttribute() 添加“onclick”函数

    为什么以下不起作用 显然该功能尚未添加 function activatetypeinput event devtype The function is called but it doesn t set the attribute var
  • 将 {sitename} 参数传递给 MVC 控制器操作

    我怎样才能检索站点范围的 URL 参数在路线中而不用参数使每个控制器操作混乱 我的问题类似于这个问题 https stackoverflow com questions 235118 asp net mvc route to usernam
  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • ajaxStop() 不触发

    这是不起作用的代码 document ajaxStop function this unbind ajaxStop prevent running again when other calls finish Display everythi
  • 仅单击 div 内部

    我正在为一个小网站制作教程 我只想让教程气泡可点击 因此 当我们尝试单击气泡之外的某些内容时 什么也不会发生 换句话说 我希望我的 html 不可点击 而 tutorial bubble 可点击 尝试这个 jQuery function h
  • ASP.Net 应用程序中的音频/视频/文本聊天

    我需要在 ASP Net 中开发一个聊天系统 我已经浏览了很多关于类似主题的问题 但没有找到任何一个令人满意的 是否可以从头开始创建它 或者我是否需要使用一些 API 我的要求仅限于我的网站用户 可以说基于内联网 请帮我 要进行文字聊天 人
  • 以一定时间间隔连续重复运行 JavaScript 函数

    这是我的第一个问题 希望您尽快回答 我想要代码连续重复一个函数 我尝试了一些代码 但没有成功 我尝试了这段代码 我想在一段时间后重复这个功能 我努力了setInterval and setTimeout 但是 我还没有收到结果 这将重复该任
  • Web 表单中的 IRouteHandler:路由需要 HttpContext.User 的请求

    我正在尝试向 Asp Net Web Forms 应用程序添加一个非常基本的路由 在 IIS 7 下运行 集成模式 http mydomain com foo http mydomain com foo 我想显示动态页面的结果 http m
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • 淘汰赛绑定,每个都可进行自定义

    我这里有一个情况 用于淘汰每个带有定制的绑定 这是我的代码 div div table tbody tr td td td td tr tbody table div div
  • 从 Orchard 内的主题渲染图像

    我刚刚选择 Orchard 来构建我的博客 作为创建这个新博客的努力的一部分 我正在创建一个自定义主题 这个自定义主题同时具有 CSS 和图像 我的问题 我的问题基本上可以归结为 如何渲染属于主题一部分的图像 到目前为止我已经尝试过的 我尝
  • 编辑用户个人资料详细信息

    如何创建用于编辑用户自定义信息的操作和视图 授权基于 VS 通过 MVC 4 项目创建的成员资格 我添加了其他列 例如 FirstName 等 我需要并且注册工作正常 但我不知道如何让此属性显示在视图中 Html EditorFor并将更改
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • ASP.NET MVC 2:查看子文件夹?

    在我看来 当我使用视图和控制器时 控制器仅处理各自文件夹的第一级 Controllers MembersController Views Members 控制器应该如何处理子文件夹 Views Members Business 控制器isn
  • Mono 中的 P/Invoke

    什么是当前状态 of Mono http www mono project com 的平台调用实现Linux and on Solaris 工作 可用且稳定 它经过了充分的测试 因为相当多的 mono 自己的低级功能必须通过它编组到底层操作
  • 为什么日期之间的减法会返回 Rational 类型?

    我正在尝试对日期执行减法运算 date sent Date parse 2013 01 01 gt Tue 01 Jan 2013 date now Date today gt Wed 04 Sep 2013 days date now d
  • PHP 中的 undefined 相当于什么?

    我的假设随后是基于假设的问题 JavaScript 有null and undefined 您可以将变量设置为null 表示它没有值 或者您可以将其设置为undefined 这意味着不知道它是否有值 它只是根本没有设置 PHP has nu
  • akka-http 具有多种路由配置

    快速背景 我正在通过一些示例学习 Akka HTTP 堆栈来创建新的 REST 项目 完全非 UI 我一直在使用和增强Akka HTTP 微服务示例 http www typesafe com activator template akka
  • Java / 重构 switch case

    我正在尝试重构下一个案例 class Gen public void startClick A a B b List
  • Ubuntu 上的 Giza++ 有正确的安装指南吗?

    我看到适用于 Giza 的正确安装指南 但不适用于 Giza 安装前者的说明 可在此处找到 http giza sourceforge net documentation installation html http giza source
  • 接口和抽象类中的 Xml 属性

    今天发现了一件让我很困惑的事情 1 如果我有这个 public interface INamed XmlAttribute string Name get set public class Named INamed public strin
  • 人名中允许使用哪些字符? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Git / 分离 HEAD,恢复工作吗?

    我对我认为是我的分支进行了数十次提交 然后检查了另一个分支 愿意回到我最初的分支 我没有找到我更新的代码 在控制台中查看我的历史记录后 我了解到我在一个独立的分支工作 是否有可能获得我在独立分支上完成的工作 是的 您可以使用重新记录 尝试g
  • date() 方法,“遇到格式不正确的数值”不希望格式化 $_POST 中传递的日期

    不幸的是我不能使用DateTime 因为该项目所在的服务器正在运行 PHP v 5 2 有问题的行 aptnDate2 date Y m d POST nextAppointmentDate 抛出以下错误 Notice A non well
  • 如何同步线上线下数据库

    我有一个Web应用程序为我的客户提供一些信息 我有另一个版本 windows that exactly work same as web application 这是因为 Web 连接可能会丢失几个小时 而此时用户将使用该应用程序 我想知道
  • Jenkins:在升级构建中使用存档的工件

    我已经将一个工件归档为构建的最后一步 它可以如下所示使用 https xxx ci cloudbees com job xxx 52 artifact target xxx 1 2 1 SNAPSHOT r8304 20130807 150
  • Unix shell 命令的一般语法是什么?

    特别是 为什么有时某些命令的选项前面有一个 标志 有时由 sign 例如 sort f sort nr sort 4n sort 3nr 如今 POSIX 标准使用getopt http pubs opengroup org onlinep
  • 何时使用 StringIO,而不是连接字符串列表?

    使用 StringIO 作为字符串缓冲区比使用列表作为缓冲区慢 什么时候使用StringIO from io import StringIO def meth1 string a for i in range 100 a append st
  • 在 Swift 中将变量传递回父级

    我正在重写一个将代码从 Objective C 转换为 swift 的教程 该应用程序从 VC 开始 其中有 3 个滑块 红色 绿色和蓝色 用于设置背景颜色 颜色名称标签和链接到第二个 VC 的按钮 在第二个 VC 中 第一个 VC 中的颜
  • Nestjs 服务级别缓存

    查看 Netsjs 文档 我可以看到一般方法是利用 CacheInterceptor 进行控制器级缓存 我希望实现的是服务 数据库级缓存 用例主要用于其他服务所需的静态数据库数据 是否有办法扩展提供的缓存模块以在服务内使用 我也在寻找一种方
  • java.lang.UnsatisfiedLinkError:无法加载 stlport_shared:findLibrary 返回 null(tess-two)

    我正在使用 sqlcipher jar 在 android 中加密数据库 并在中使用它的本机库 libs armeabi 文件夹 1 lib数据库sqlcipher so 2 libsqlcipher android so 3 libstl
  • 如果标题是从不参与选项菜单的 Fragment 设置的,则 Activity 的标题区域不会展开

    这与提到的问题非常相似here https stackoverflow com q 24089136 1747491 这基本上解决了我的问题 但是 如果您正在设置title from a fragment这无助于options menu 则
  • 如何创建级联下拉列表

    我有两个用于过滤目的的下拉列表 如何将此下拉列表更改为 catchcadaing 下拉列表 public ActionResult Index REFINED DBEntities db new REFINED DBEntities Vie