Asp.net mvc ASP.NET MVC中的空选择列表

Asp.net mvc ASP.NET MVC中的空选择列表,asp.net-mvc,Asp.net Mvc,我相信这是一种常见的手术,但我很难找到解决方案。这是一个网页上两个的问题,其中一个依赖于另一个获取其可能值列表 我在网页上有一个包含子状态代码的下拉列表,其可能值的列表取决于包含状态代码的网页上另一个下拉列表中的选择。在我的控制器中,我从数据库中检索可能的状态代码列表,并将值放入一个SelectList中,DropDownList HTMLHelper使用该列表在视图中构建我的选择列表。我检索一个包含状态代码的模型记录,并使用该状态代码值在数据库中查找substatus的可能值,然后将该列表放入

我相信这是一种常见的手术,但我很难找到解决方案。这是一个网页上两个
的问题,其中一个依赖于另一个获取其可能值列表

我在网页上有一个包含子状态代码的下拉列表,其可能值的列表取决于包含状态代码的网页上另一个下拉列表中的选择。在我的控制器中,我从数据库中检索可能的状态代码列表,并将值放入一个SelectList中,DropDownList HTMLHelper使用该列表在视图中构建我的选择列表。我检索一个包含状态代码的模型记录,并使用该状态代码值在数据库中查找substatus的可能值,然后将该列表放入另一个SelectList中,以用于第二个下拉列表。当用户更改状态下拉列表中的选择时,页面将向服务器发出ajax回调,以使用新的可能值列表重新填充substatus下拉列表

空状态码实际上不是有效值,但这是一个用于纠正此类问题的质量控制应用程序。我的问题是,模型记录上的当前状态代码有时可能是空的,因此我的第二个下拉列表的子状态值列表将是空的。不幸的是,似乎没有办法创建一个空的SelectList来传递给DropDownList HTMLHelper,但是我的下拉列表必须在页面加载时创建,以支持我的ajax解决方案


有没有人想出一种高效、超级灵巧的方法来处理这种情况?或者我需要求助于一些丑陋的东西,比如在我的视图中检查substatus SelectList是否为null,以及它是否使用不同的HTML生成下拉列表?在我看来,能够生成一个空的选择列表并将其交给HTMLHelper是一个合理的解决方案。我欢迎任何想法。

只返回一个虚拟项,让javascript检查该项,然后禁用第二个dropdownlist。

可以将空列表传递给dropdownlist

在控制器中,您应该具有以下内容:

var status_code_id = mymodel.status_code_id; var substatus_code_id = mymodel.substatus_code_id; ViewData["status_code_id"] = new SelectList( StatusCodes.FindAll(), "id", "code", status_code_id); ViewData["substatus_code_id"] = new SelectList( SubstatusCodes.FindAllForStatus(status_code_id), "id", "code", substatus_code_id); <%= Html.DropDownList("status_code_id", "--not selected--")%> <%= Html.DropDownList("substatus_code_id", "--not selected--")%> var status\u code\u id=mymodel.status\u code\u id; var substatus_code_id=mymodel.substatus_code_id; ViewData[“状态代码id”]=新建选择列表( StatusCodes.FindAll(),“id”,“code”,status\u code\u id); ViewData[“子状态代码id”]=新建选择列表( 子状态代码。FindAllForStatus(状态代码id),“id”,“代码”,子状态代码id); …其中FindAllForStatus包含与AJAX调用中用于填充substatus dropdownlist的代码相同的代码。FindAllForStatus应该接收一个空的状态代码并返回一个空列表

在您看来,您应该有如下内容:

var status_code_id = mymodel.status_code_id; var substatus_code_id = mymodel.substatus_code_id; ViewData["status_code_id"] = new SelectList( StatusCodes.FindAll(), "id", "code", status_code_id); ViewData["substatus_code_id"] = new SelectList( SubstatusCodes.FindAllForStatus(status_code_id), "id", "code", substatus_code_id); <%= Html.DropDownList("status_code_id", "--not selected--")%> <%= Html.DropDownList("substatus_code_id", "--not selected--")%>
您可以使用Enumerable.Empty()

@Html.DropDownList(“下拉名称”,Enumerable.Empty())

还通过添加Enumerable.Empty()作为参数来处理MultiSelectList