代码之家  ›  专栏  ›  技术社区  ›  Lee Dale

正在使用jquery从违反MVC模式的UI调用WCF数据服务

  •  3
  • Lee Dale  · 技术社区  · 14 年前

    我对ASP.NET MVC 2还比较陌生,并且了解MVC模式本身。但我的问题是,在遵循MVC模式的UI中填充DropDownList的最佳方法是什么。我应该通过控制器吗?

    我看到的每一篇文章都展示了如何使用javascript和jquery来实现这一点。我有一个在MVC2中编写的测试应用程序,我让我的下拉列表使用jquery,它基本上调用一个wcf数据服务,该服务返回填充下拉列表的json。在我看来,虽然这是绕过控制器,直接进入模型,因此严格违反了MVC模式。

    或者我错过了一些明显的东西。您的想法或最佳实践将非常受欢迎。

    谢谢

    3 回复  |  直到 14 年前
        1
  •  3
  •   RPM1984    14 年前

    MVC的一个优点是控制器可以作为“Web服务”或排序结合在一起。也就是说,您可以轻松地指定“jsonresult”的返回类型(而不是view-actionresult)。

    MVC框架将为您处理所有的序列化。

    您可以很容易地从jquery调用控制器操作方法并填充下拉列表。

    在您的示例中,我将创建一个JSON控制器方法,用一些自定义的操作过滤器(检查它是JSON HTTP GET请求的HTTP头等)来修饰它,从jquery调用它并绑定到下拉列表。

        2
  •  0
  •   John Bledsoe    14 年前

    如果下拉列表是静态的(即不是级联下拉列表),则可以向模型中添加AvailableItems属性,在控制器中设置其值,然后从中填充列表。如果您的列表需要根据其他用户选择进行更新,那么您需要调用某种类型的Ajax服务。

    通常,如果您的应用程序具有在客户机上运行的脚本代码,那么该代码将在您的视图中。我个人并不认为这违反了MVC。

        3
  •  0
  •   Jason    14 年前

    我认为你最好的选择是 视图模型 尝试一下。

    您可以在控制器中为特殊的面向UI的模型构建填充数据,并将其传递给视图。对于下拉列表,是否有理由通过Ajax加载?在大多数情况下,我发现您只需构建一个普通的选择列表,并为动态功能添加JavaScript。

    您的视图模型可能具有 IEnumerable<String> CityNames 属性,然后将其加载到视图中的下拉列表中。