【问题标题】:Empty SelectList in ASP.NET MVCASP.NET MVC 中的空选择列表
【发布时间】:2010-11-14 12:10:06
【问题描述】:

我确信这是一种常见的操作,但我很难找到解决方案。这是一个网页上的两个<select> 的问题,其中一个依赖于另一个的可能值列表。

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

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

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

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    你可以使用 Enumerable.Empty()

    @Html.DropDownList("dropdown-name", Enumerable.Empty<SelectListItem>())
    

    【讨论】:

    • 还通过添加 Enumerable.Empty() 作为参数与 MultiSelectList 一起工作
    【解决方案2】:

    可以将空列表传递给 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);

    ...其中 FindAllForStatus 包含您在 AJAX 调用中用于填充子状态下拉列表的相同代码。 FindAllForStatus 应该接受一个空的状态码并返回一个空列表。

    在你看来,你应该有类似的东西:

    【讨论】:

      【解决方案3】:

      只返回 1 个虚拟项目,让 javascript 检查该项目,然后禁用第二个下拉列表。

      【讨论】:

        猜你喜欢
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多