【问题标题】:Saving Cascading drop downs in MVC在 MVC 中保存级联下拉菜单
【发布时间】:2013-08-28 21:42:29
【问题描述】:

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

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

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

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

我应该怎么做?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    每个下拉菜单的值集有多大?

    几年前我试图做同样的事情。 DD1 是美国和加拿大,DD2 是相关的州和省。如果您的数据集相对较小,您最好将这两种情况的所有选择列表标记都放在页面中,然后用 javascript (jQuery) 将其换出。无论您是使用 ajax 还是整页刷新,您都可以节省请求往返时间。

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

    【讨论】:

      【解决方案2】:

      除非您想进行整个页面的回发,否则您将不得不使用 javascript。对于这种类型的事情,javascript/ajax 是要走的路。当我切换到 MVC 时,我个人很难接受所有这些业务逻辑都发生在 MVC 模型之外。但归根结底,它使网站运行得最好(用户看不到您的代码,也不知道它有多漂亮)。

      无论如何,除非您发布整个页面,否则部分将不起作用,因为不使用 javascript,部分将呈现为该页面/表单的一部分。

      我只需在第一个下拉菜单中添加一个 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 } };
      }
      

      希望对你有帮助

      【讨论】:

      • 如果我在我的页面上有一个名为“应用程序”的部分视图,您会说。而且我在应用程序中有 5 个部分视图,我不能一次提交整个“应用程序”部分视图并保存所有数据?
      • 好吧,如果你做得对的话。在父视图中,您使用 html.BeginForm() 包装“应用程序”部分 - 确保没有其他表单标签嵌套在任何这些部分中。如果您的帖子 ActionResult 需要一个模型,则字段名需要匹配(区分大小写)。该顶级表单中的所有字段都应该在 ActionResult 中可用 - 即使这些字段是使用 javascript/ajax 填充和操作的。跨度>
      • 那么嵌套的局部视图需要和Application局部视图有相同的Model吗?
      • 是的,如果您想 1) 利用 MVC 的验证,3) 如果您希望验证与无效字段交互,例如突出显示它们 3) 使用 MVC 帮助器创建字段,例如 m.FirstName)%> 4) 与 MVC 模型保持一致 - 仅举几例 =) 我知道有人会读到这篇文章并说“我可以在不坚持MVC 模型!” - 我说“你是对的!” - 但这些只是示例;)
      猜你喜欢
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 2011-06-23
      • 2021-03-16
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      相关资源
      最近更新 更多