Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC-级联下拉列表_Asp.net Mvc_Cascadingdropdown - Fatal编程技术网

Asp.net mvc ASP.NET MVC-级联下拉列表

Asp.net mvc ASP.NET MVC-级联下拉列表,asp.net-mvc,cascadingdropdown,Asp.net Mvc,Cascadingdropdown,我目前正在学习ASP.NETMVC并使用Nhibernate 我想使用级联下拉框。有没有人能够让级联下拉框在MVC中工作 更新: 我看了以下网站:并使用了方法1 控制器代码 var makeList = new SelectList(makeRepository.ListMakes (), "Id", "make",1); ViewData["Makes"] = makeList; //// Create Models view data

我目前正在学习ASP.NETMVC并使用Nhibernate

我想使用级联下拉框。有没有人能够让级联下拉框在MVC中工作

更新: 我看了以下网站:并使用了方法1

控制器代码

        var makeList = new SelectList(makeRepository.ListMakes (), "Id", "make",1);
        ViewData["Makes"] = makeList;

        //// Create Models view data
        var modelList = new CascadingSelectList(modelRepository.ListModels (Convert.ToInt32(makeList.SelectedValue.ToString())), "ModelID","Id", "Name");
        ViewData["Models"] = modelList;
视图代码

<%= Html.DropDownList("--Select Make--","Makes")%>
<label for="Makes">Car Model:</label>    
<%= Html.CascadingDropDownList("Models", "Makes") %> 
当选择id为1的品牌时,会列出正确的汽车列表,但当我选择其他品牌时,型号列表为空?

您可能需要阅读此内容


在本技巧中,Stephen Walter演示了创建级联下拉列表的三种方法。首先,他向您展示了当另一个下拉列表中的选项发生更改时,如何更改一个下拉列表显示的选项列表。其次,他向您展示了如何通过控制器操作公开下拉列表的数据。接下来,他将向您展示如何从web服务中获取下拉列表的数据。

您正在使用的技巧:ASP.NET MVC Tip 41–使用Stephen Walther的Ajax创建级联下拉列表不是使用MVC Realease 1.0完成的

因此,在修复了一些小问题之后,它可以很好地与下载的项目配合使用,但是当您尝试将其合并到MVC 1.0版时,情况就不一样了

例如:在下载的项目中,脚本位于内容文件夹中,在1.0版中,脚本位于脚本文件夹中

此外,版本中的一些*.js文件(如果不是全部的话)也从bets和ctp更改而来。这可能也是一个问题

我下载了他的项目,修复了几个小问题,在该项目中*.js文件运行良好

比如说,

我修正如下:

更改:\Views\Home\index.aspx

致:

如你所见,这里有一些问题

这些类型的问题与教程和博客是丰富的;每个人都想被认为是即将发布的新技术的专家,所以他们编写了关于Beta和CTP的教程。结果是,专家将拥有与最终版本不兼容的内容

你需要找到的是一位发布过教程的专业人士。专业人士将确保他们的教程有效。我所说的专业人士是指该技术领域的专业培训师

斯蒂芬·沃尔特有一个更好的博客和很多好东西,但请记住,他是一个微软福音传道者。他写了一些关于微软技术的书,所以他需要活跃在博客世界里,所以他把一些好东西放在前沿技术上。这使他被视为专家,这样他的书就可以卖了


请记住,无论是哪位专家,当您试图在最终版本中使用这些信息时,基于Beta和CTP的博客/文章都会有不准确之处。

我为此创建了一个jQuery插件


你可能想看看我几周前就这个做的

首先,我们需要设置JsonResult控制器操作

假设我们设置了两个下拉列表,一个用于make和 其他的模型,像这样

我们可以包含以下jquery代码


很抱歉出现无耻的插件:

谢谢,我使用了方法1,但是当我选择第一个下拉框时,第二个下拉框仍然为空?您是否将CascadingDropDownList.js放入了内容文件夹?您的模型列表应该包含所有模型。现在您只为所选的第一个品牌选择型号。谢谢,我从var makeList=new SelectListmakeRepository.ListMakes,Id,make;我在var modelList=new CascadingSelectListmodelRepository.ListModels Convert.ToInt32makeList.SelectedValue.ToString、ModelID、Id、Name时出错;因为没有选择的值。不,1号是它应该在的位置。问题在于模型列表。它应该等于新的CascadingSelectListmodelRepository.GetAllModels、ModelID、Id、Name;我不知道您的存储库是否有这样的方法,但这是级联列表工作所必需的。您的模型列表应该包含所有模型。现在,您只为所选的第一个品牌选择型号。请看:您对此有何看法?试着用你的例子。异常详细信息:System.ArgumentNullException:值不能为null。参数名称:items@Html.DropDownListFormodel=>model.OrigSampID,新建SelectListModel.OrigSampID,OrigSampID,SampDate
<label for="Makes">Car Make:</label>  
<%= Html.DropDownList("--Select Make--", "Makes") %>
<label for="Makes">Car Make:</label>
<%= Html.DropDownList("Makes", (SelectList)ViewData["Makes"], "--Select Make--")%>
/// <summary></summary>  
/// Get Models
/// <param name="makeID" />  
/// <returns></returns>  
public JsonResult GetModels(string id)  
{       
   JsonResult result = new JsonResult();       
   var filteredModels = from model in homeViewModel.Models
                        where model.MakeID.ToString() == id
                        select model;       result.Data = filteredModels.ToList();
   result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;    
   return result;  
} 
jQuery.getJSON( url, [ data ], [ callback(data, textStatus) ] )
   Html.DropDownListFor((model) => model.MakeID, new SelectList(Model.Makes, "ID", "Description"))    
   Html.DropDownListFor((model) => model.ModelID, new SelectList(Model.Models, "ID", "Description"))
//Hook onto the MakeID list's onchange event  
$("#MakeID").change(function() {   
   //build the request url   
   var url = '<!--Url.Content("~/")-->' + 'Home/GetModels';

   //fire off the request, passing it the id which is the MakeID's selected item value   
   $.getJSON(url, { id: $("#MakeID").val() }, function(data) {    
      //Clear the Model list    
      $("#ModelID").empty();    
      //Foreach Model in the list, add a model option from the data returned    
      $.each(data, function(index, optionData) {       
         $("ModelID").append("<option value=" + optionData.ID +">"+ optionData.Description +"</option>"  );    
      });
   });  
}).change();