【问题标题】:How to separate the view and the controller in an ASP.NET application如何在 ASP.NET 应用程序中分离视图和控制器
【发布时间】:2017-07-05 16:04:32
【问题描述】:

我有一个由“程序员”开发的 ASP.NET 应用程序。这个应用程序包含所有你不应该做的事情:

  • 硬编码设置
  • 在任何地方复制/粘贴(代码不重复使用)
  • 为每一行向数据库发出大量小的 SELECT 请求,而不是执行 JOIN
  • 模型、视图和控制器合二为一

现在,我的目标不是扔掉所有东西重新开始,而是想将应用程序的 MVC 的不同方面分开。我不想开始一个新的 MVC 项目,我想将现有的解决方案演变成模块化的东西。

对于控制器,没有问题,我可以创建管理数据库连接、发送邮件等的类。另一方面,我不知道如何分离视图和控制器。

传统ASP页面myPage.aspx有一个关联文件myPage.aspx.vb的问题,在这个vb文件中既有视图管理部分(页面元素,例如下拉菜单)以及在按钮单击时执行的业务部分(控制器)。

我考虑调用一个 myPageControl.vb 类,该类将包含文件 myPage.aspx.vb 中的业务部分,该类将调用模型 (数据库、邮件、其他)。

(View: myPage.aspx.vb) -> (Control: myPageControl.vb) -> (Model: Db.vb, Mail.vb)

问题是:我应该如何从控制器修改页面内容,例如更改列表值或在其上显示文本。我必须调用视图(向另一个方向)并通过参数传递类 MyPage (.asp.vb)

我已经尝试找到我的问题的答案,但我只找到了有关 MVC 项目的答案。 有人知道我应该怎么做吗?

【问题讨论】:

  • 这听起来像是一个 WebForms 应用程序,而不是一个 MVC 应用程序。除非我误读了:"pages myPage.aspx have an associated file myPage.aspx.vb"
  • 顺便说一句 - 将其重写为 MVC 应用程序可能是您想要做的事情
  • 请注意,WebForms 和 MVC 可以共存于同一个项目中。您可以逐渐将功能从一个转移到另一个。
  • 我建议您稍后在重构中执行此操作。首先创建适当的业务对象和数据访问。这将集中最重要的部分(业务逻辑和数据库查询)。之后,看看创建 MVC。
  • 控制器也不应该管理数据库连接——它应该在你的控制器与之对话的数据层中。

标签: c# asp.net asp.net-mvc vb.net


【解决方案1】:

关注点分离是 Web 表单的主要问题之一,也是 MVC 的优势之一。在我看来,你可能做的最好的事情就是像现在这样将业务逻辑分离到类中,这样代码就可以在整个应用程序中重复使用,但是完全“分离”一切可能需要将应用程序重新构建为 MVC 应用程序。

【讨论】:

    【解决方案2】:

    我找到的唯一答案是让控制器将“要绑定的数据”作为 XML 发送到页面。那么所有页面当然就是它的 page_load,然后是一个接收 XML 并从中更新自身的方法。您可以使用智能命名结构,以便您可以从 xml 到页面元素进行反射和自动绑定。

    然后在一个动作上,让页面生成其上所有元素及其值的 xml,并通过确定正确控制器并调用控制器上正确方法的“ProcessAction”方法发送。

    但正如建议的那样,如果这是您想要的模式,那么将其作为一个 MVC 项目重新进行可能是最有意义的。我的建议可行,但与从头开始使用 MVC 一样多或更多。此外,请记住,对 Web 表单的“支持”很快就会消失。它不在(也不会在).NetCore 中,所以日子已经屈指可数了。

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多