保存MVC中的级联下降

时间:2013-06-11 15:08:30

标签: asp.net-mvc

我的MVC局部视图中有级联下拉列表。 DD1驱动DD2中的值。当我选择DD1时,我想根据数据库表填充基于DD1值的正确值。

我的想法是让DD2成为局部视图并嵌套在我的表单中。然后,使用ajax,我可以告诉局部视图刷新并将其传递给DD1的值。

问题是,当我提交整个视图时(同时使用DD1和DD2以及其他东西的bucnh,我如何获得DD2中的值?

我正在尝试使用MVC解决此问题,而不是在更改DD1时触发javascript函数以进行JSON调用以获取选项,然后使用javascript将DD2修改为正确的值。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

每次下拉的价值有多大?

几年前我试图做同样的事情。 DD1是美国和加拿大,DD2是相关国家和省份。如果您的数据集相对较小,那么最好只为页面中的两种情况选择所有选择列表标记,然后使用javascript(jQuery)将其交换出来。无论你是去ajax还是整页刷新,你都可以自己保存请求往返。

如果数据集很大并且将所有值放在标记中没有意义,并且您想要使用MVC视图而不是使用ajax调用修改DOM,那么只需刷新整个页面即可。如果你想去ajax,那么只需用jQuery修改DOM;你不需要部分视图来完成这个任务。

答案 1 :(得分:0)

除非你想要整个页面回发,否则你将不得不使用javascript。对于这种类型的东西,javascript / ajax是要走的路。当我切换到MVC时,我个人很难接受所有这些业务逻辑都发生在MVC模型之外。但最终,无论是什么使网站运作得最好(用户没有看到你的代码,知道它有多漂亮)。

无论如何,除非你在不使用javascript的情况下发布整个页面,否则partials将无效,部分将呈现为该页面/表单的一部分。

我只是在第一个下拉列表中添加一个onchange事件,触发对同一个控制器中某个方法的json调用...类似

...的jquery ...

$("#mydropdown").change(function() {
    $.post("/Controller/DropdownChangedJSON", { firstdropdownvalue: $("#mydropdown").val() }, function(data) {
    $("#seconddropdown").empty();
    //    loop through "data" to populate dropdown
}); //post
}); //mydropdown_change()

并在您的控制器中:

public JsonResult DropdownChangedJSON(string firstdropdownvalue) {
    //get results
    List<datamodel> myarray = //something
    return new JsonResult { Data = new { success = true, rows = myarray } };
}

希望这会有所帮助