3

我正在尝试编写一个具有两个下拉列表的 MVC 网页。第二个列表的内容取决于第一个列表中选择的内容。

使用内置的 MVC 函数似乎没有明确的方法来做到这一点,所以我将不得不自己动手。但是我不清楚获得我需要的所有功能的最佳方式......这是“与网络表单相同”:)

我以与此类似的方式创建了下拉列表

但是我不确定如何开发它,以便如果第一个列表中有一个“选定”元素,当它第一次绑定时,它会自动绑定页面加载时的第二个列表。

编辑:为了清楚起见,我能够将过滤后的列表绑定到第二个下拉列表。但是,如果我的模型包含第一个下拉列表的选择,则选择设置正确,但第二个下拉列表未填充。

(我是否必须声明我对 MVC 很陌生,而 Javascript 对我来说就像是某种外星语言?)

Edit2:我对此进行了更多的考虑。显然,我在开发 Web 表单时深受影响,而且我还没有完全“掌握”MVC。我认为我确实有一些我应该在我的模型中捕获的东西(即,如果我已经有了设置两个下拉列表的信息,那么我应该以某种方式在控制器中捕获它并构建预设的下拉列表。而不是试图构建一个“ondatabound”类型的方法并让视图调用它(这是我最初的意图)......现在我需要去研究如何做到这一点:)

4

3 回答 3

2

是我发现的更好的实现之一。这个问题也在这里讨论过。

于 2011-05-26T20:25:56.443 回答
1

您的任务包含 3 个子任务:

  1. 您应该通过使用选定的值更改第一个 ddl 的选择时 ajax 获取第二个 ddl 的项目列表
  2. 您应该通过控制器处理获取第二个 ddl 的项目列表的操作,并返回具有第二个 ddl 定义内容的视图
  3. 您应该通过获取已处理操作的结果来更新第二个 ddl 的内容

<script type="text/javascript">

    $(函数(){
        $("form #ddl_1").change(function(){
            $.get({ // 获取请求
                   url: "@Url.Action("MyController", "GetList"})" + "/" + $(this).val,
                   成功:函数(数据){ //更新
                       $("表格#ddl_2").html(数据);
                   }
        })
    });

</script>

如果您使用默认路由表(或者您需要使用自定义在路由表中创建特殊记录)并返回带有 ddl2 选项列表的部分视图(没有母版页),则“GetList”操作应采用参数“id”,如下所示:

<option value="1">First</option>
<option selected value="2">Second</option>
<option value="3">Third</option>
于 2011-05-26T15:22:16.283 回答
0

有关在 asp.net mvc 中使用可下载的源代码创建级联下拉列表,请参阅此博客文章

于 2011-05-26T14:49:11.333 回答