我的MVC局部视图中有级联下拉列表。 DD1驱动DD2中的值。当我选择DD1时,我想根据数据库表填充基于DD1值的正确值。
我的想法是让DD2成为局部视图并嵌套在我的表单中。然后,使用ajax,我可以告诉局部视图刷新并将其传递给DD1的值。
问题是,当我提交整个视图时(同时使用DD1和DD2以及其他东西的bucnh,我如何获得DD2中的值?
我正在尝试使用MVC解决此问题,而不是在更改DD1时触发javascript函数以进行JSON调用以获取选项,然后使用javascript将DD2修改为正确的值。
我该怎么做?
答案 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 } };
}
希望这会有所帮助