当前位置: 首页 > 编程语言 > C#

使用基于另一个下拉列表(级联DropDownList)的MVC2填充下拉列表

时间:2023-04-10 18:10:09 C#

基于另一个下拉列表(级联DropDownList)使用MVC2填充下拉列表我需要两个DropDownLists:如何在MVC2中执行?我的想法:选择第一个列表时是否使用ajax调用,然后将模型拉回模型DDL?模型绑定将如何发挥作用?更新我发布了我最终所做的事情的答案。它非常简单并且效果很好。如果您愿意,也可以使用get,但是您必须指定您想要这样的东西...returnJson(citiesList,JsonRequestBehavior.AllowGet);这就是我最终做的...没有额外的插件/1000行代码......Html//第一个DDL是从我的ViewModel中的列表提供的,您可以更改它...JQuery$(document).ready(function(){$('#MakeList').change(function(){$.ajaxSetup({cache:false});varselectedItem=$(this).val();if(selectedItem==""||selectedItem==0){//什么也不做或隐藏...?}else{$.post(''+$("#MakeList>option:selected").attr("value"),function(data){varitems="";$.each(data,function(i,data){items+=""+data.Name+"";});$("#ModelID").html(items);$("#ModelID").removeAttr('禁用');});}});});那Action[HttpPost]publicActionResultGetModelsByMake(intid){Models.TheDataContextdb=newModels.TheDataContext();列出模型=db.Models.Where(p=>p.MakeID==id)。列表();返回Json(模型);这是一个很好的方法:假设我们有两个下拉列表,国家和城市,默认情况下城市下拉列表是禁用的,whenacountryisselected,thefollowinghappens:1.citydropdownlistgetsenabled.2.对选定国家/地区的操作方法进行AJAX调用,并返回城市列表。3.城市下拉下拉列表填充了发回的JSON数据。MVCCentral提供给KingWilder的原始代码的致谢此示例是从他在GolfTracker系列中的代码中提取的简化版本。HTML//此处为国家/地区选项列表。//由ajax调用填充JavaScript的//将事件处理程序更改为第一个下拉列表(国家列表)$("#Country").change(function(){varcountryVal=$(this).val();varcitySet=$("#City");//需要为要启用和填充的城市选择国家。if(countryVal.length>0){citySet.attr("disabled",false);adjustCityDropDown();}else{citySet.attr("禁用",true);citySet.emptySelect();}});//用于填充第二个下拉列表(城市列表)的方法functionadjustCityDropDown(){varcountryVal=$("#Country").val();varcitySet=$("#City");if(countryVal.length>0){//1.检索国家/地区的城市...//2.OnSelect-启用城市下拉列表并检索数据$.getJSON("/City/GetCities/"+countryVal,function(data){//loadSelect-请参阅下面的注释2citySet.loadSelect(data);});}}行动方法[HttpGet]publicActionResultGetCities(stringcountry){Check.Require(!string.IsNullOrEmpty(country),"Stateismissing");varquery=//获取所选国家/地区的城市。//将结果转换为JsonSelectObjects列表,以便稍后在loadSelectJavascript方法中轻松使用。列出城市列表=newList();foreach(variteminquery){citiesList.Add(newJsonSelectObject{value=item.ID.ToString(),caption=item.CityName});}返回Json(citiesList,JsonRequestBehavior.AllowGet);}重要说明:1.JsonSelectObject在将结果转换为选项标记时帮助JsonSelectObject,因为它将在下面的javascriptloadSelect方法中使用它基本上是一个具有两个属性的对象值和标题的类:publicclassJsonSelectObject{public字符串值{得到;放;}公共字符串标题{get;这转化为要在调用下拉列表中注入的选项列表。这是原始代码中引用的“jQueryInAction”一书中的一个很酷的技巧,它包含在您需要引用的jquery.jqia.selects.js文件中。这是js文件中的代码:=0;});}$.fn.loadSelect=function(optionsDataArray){returnthis.emptySelect().each(function(){if(this.tagName=='SELECT'){varselectElement=this;selectElement.add(newOption([Select]",""),null);$.each(optionsDataArray,function(index,optionData){varoption=newOption(optionData.caption,optionData.value);如果($.浏览器.msie){selectElement.add(option);}else{selectElement.add(option,null);}});}});}})(jQuery);这种方法可能很复杂,但最终你会得到一个干净紧凑的代码,你可以在别处使用。我希望这对您有帮助,,,UPDATE在AJAX调用中使用POST而不是GET您可以将$.getJSON调用替换为以下代码以使用POST而不是GET进行ajax调用。$.post("/City/GetCities/",{country:countryVal},function(data){citySet.loadSelect(data);});还请记住通过将带有[HttpPost]的[HttpGet]注释更改为接受POST请求来更改Action方法,并在Action方法中返回结果时删除JsonRequestBehavior.AllowGet。重要说明请注意,我们使用的是所选项目的值而不是名称。例如,如果用户选择以下选项。UnitedStates然后将“UnitedStates”而不是“UnitedStates”发送到Action方法更新2:访问控制器中的选定值假设您的Vehicle视图模型中具有以下两个属性:publicstringMaker{get;放;}公共字符串模型{得到;放;}并使用与ViewModel属性相同的名称命名选择元素。//国家选项列表在这里。//由ajax调用填充选定的值然后将自动绑定到ViewModel,您可以直接在Action方法中访问它们。如果页面强键绑定到该ViewModel,这将起作用。注意:对于第一个列表(TheMakesList),您可以在SelectList类型的ViewModel中创建一个MakersList,并使用HTML帮助程序使用ViewModel中的列表自动填充MakersDropDown。代码如下所示:model.Maker,Model.MakersList)%>在这种情况下,为该选择生成的名称也将是“Maker”(ViewModel中属性的名称)。我希望这是您正在寻找的答案。最简单的方法是使用jQuery“cascade”插件。http://plugins.jquery.com/project/cascade(查看那里的演示页面)。如果你想使用ajax来解析值,它也可以帮助你,它从以前的答案中删除了很多代码,所以你可以专注于你的逻辑:)你可以在google中找到很多例子,但最后只能用下面的脚本:以上是C#学习教程:使用MVC2基于另一种下拉列表填充下拉列表(级联DropDownList)内容全部分享,如果对大家有用需要了解更多C#学习教程,希望大家多多关注—$('#myChildSelect').cascade('#myParentSelect',{ajax:'/my/url/action',template:function(item){return""+item.text+"";},匹配:function(selectedValue){returnthis.when==selectedValue;}});本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: