为什么选择 MVC 而不是优秀的旧式 ASP.NET?还是不明白为什么我应该走这条路?

2024-01-30

我知道这个问题之前已经被问过,并且我阅读了所有答案,但他们仍然没有给我我正在寻找的答案。我需要一些具体的东西。我自愿向我们组中的其他开发人员进行 MVC 演示,这迫使我学习它。每个人都面临的一个大问题是:“MVC 可以带来哪些我们在 ASP.NET 中做不到的事情,或者 MVC 可以做得更快。我刚刚经历了 Nerd Dining,实际上创建了一个完整的网站,有点模仿 Nerd Dining 。但是,尽管 Scott Guthrie 在这方面做了出色的工作,但仍有很大的空白没有得到解答,例如,如何在列表页面上使用按钮抛出一个文本框并进行简单的搜索。在 asp.net 中,我会在页面上抛出一个文本框、按钮和网格,并将其绑定到存储过程,然后我就走了。MVC 中的等效项是什么。我想我需要一个关于如何在不使用 Linq-to-Sql 的情况下使用 MVC 的非常好的教程。

我知道我对此有点喋喋不休,但这是一个非常严肃的问题,似乎仍然没有答案。

顺便说一句,MVC 的视图页面带回了经典 asp 的噩梦,其中包含我们在使用页面后代码时远离的所有内联代码。是的,MVC 有控制器和模型类,它们很棒,但我仍然不喜欢 html 中的经典 asp 标签。

请帮助我,我真的很喜欢 MVC 的概念并希望它成功,但我需要更多!


如何使用按钮在列表页面上放置一个文本框并进行简单的搜索。在 asp.net 中,我会在页面上放置一个文本框、按钮和网格,并将其绑定到存储过程,然后就可以走了

这正是“经典”ASP.NET 又名 WebForms 背后的最大问题。

您不应该考虑页面、按钮和事件。

您应该学习网络工作原理的基础知识。然后您就会明白网络是用 HTTP 协议及其命令 GET、POST 等来表达的。表示是 HTML、CSS 和文档对象模型,这是 JavaScript 发挥作用的地方。事实上没有页面,url 只是指向资源的指针,不一定映射到服务器上的物理文件(.html 或 .aspx)。

MVC 的视图页面带回了经典 ASP 的噩梦,其中包含我们在使用页面后代码时远离的所有内联代码。

在使用 WebForms 后我也来到了 MVC,我发现我非常喜欢内联代码。它使视图结构非常清晰,这不能说是静态标记(aspx)+在代码隐藏中操作服务器控件的耦合。后者实际上是一场噩梦 - 您的代码正在生成标记输出,但您看不到在哪里以及如何生成。

MVC 可以带来哪些我们在 ASP.NET 中做不到的事情,或者 MVC 可以做得更快

它消除了 WebForms 给我们带来的丑陋的状态抽象。现在你又回到了起点。你现在拥有的是:

  • 将演示部分(视图)与应用程序逻辑分开的选项。在此之前,所有内容都混合在一起,代码隐藏与数据库通信,调用其他服务,修改标记。真是一团糟。它导致编写了许多严肃的应用程序,但几乎不再可维护。

  • 能够自动测试您的应用程序逻辑。借助 WebForms 和代码隐藏,您将如何调用特定场景?您可以使用 Selenium 等工具来模拟用户活动。现在,当您的视图只是一个被动的表示层时,您就不再有这个问题了。您可以非常轻松地测试业务逻辑和模型输出。视图用于显示结果。如果模型在特定场景中获得了正确的数据,视图将正确显示它。如果没有那就没有。时期。无需测试视图。

  • 控制您的标记。那就是如果你关心的话。如果您是一名前 Windows 开发人员,不关心 HTML 文档是否有效、语义是否正确以及是否针对 Web 引擎进行了优化,那么它对您来说毫无用处。我的意思是,“页面”的显示方式,用户点击的处理方式就像在桌面应用程序中一样,还有什么,对吧?但是,如果您对所有这些事情感兴趣,那么您会查看最终的标记输出,并发现它很丑陋,有很多错误和您根本无法修复的限制。因为这是控件、按钮、数据网格等显示自身的方式。尝试修复它们将需要覆盖这些控件的标记生成,这是一项繁重的任务。为什么不直接放弃它并手动完成所有事情呢?

MVC 从表中获取什么?

服务器端处理“控制”“事件”,就像 Windows 编程一样。如果您正在为 Web 媒体开发类似桌面的应用程序,就像那些典型的“商业”软件,其中有数十个和数百个控件让您发疯,那么 MVC 会让您发疯,因为您必须将每个控件单独与JavaScript。

但是,如果您不是开发此类应用程序(需要一定的心理能力才能使用),而是开发现代可用的 Web 软件,那么 WebForms 会让您发疯。迟早。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么选择 MVC 而不是优秀的旧式 ASP.NET?还是不明白为什么我应该走这条路? 的相关文章

  • asp.net cookie、身份验证和会话超时

    我有一个使用表单身份验证的 asp net 网站 我在会话中保留一些信息 例如用户名 用户 ID 电子邮件等 我通过在身份验证 cookie 上设置较长的到期日期来允许用户保持登录网站的状态 因此 当用户仍处于身份验证状态时 会话过期的情况
  • T-sql、刻度、时间戳

    是否有可能在 t sql 中获得像 DateTime Ticks 这样的 C 内容 感谢帮助 您不太可能从 SQL 中获得与 DateTime Ticks 相同的精度 因为 SQL 不能以那么高的精度表达时间 SQL Server 只存储大
  • 将新行添加到表后如何更新 datagridview 的行列表

    我有一个 datagridview 在表单的加载事件上填充了表集合 我还有一个由用户填写的表单 并将新行添加到表 onclick 事件 我想在向该表添加新行后更新 datagridview表 我使用绑定到绑定数据源的 sqladapter
  • 如何使用 Visual Studio 2013 和实体框架将控制器添加到 ASP.NET MVC?

    当我使用 ASP NET MVC 5 0 和 Entity Framework 6 0 在 Visual Studio 2013 中添加控制器时 出现错误 我已经添加了一些控制器并生成了视图 但是在添加数据表包之后 我收到了此类错误 Err
  • 在.NET Core RC2中构建.exe文件

    每次我使用新的 NET Core RC2 模板构建项目时not提供了一个可运行的 EXE文件 如果我按 F5 来调试我的控制台应用程序 它可以通过 C Program Files dotnet dotnet exe 应用 如果我使用 dot
  • 删除具有多个主键的 Datalist 行

    我有一个带有 OnDeleteCommand Delete Command 的数据列表 我想要删除具有多个主键的记录 但我不知道如何从 Delete Command 事件访问它 如果我使用 DataKeyField 我只能使用一个键 有什么
  • ASP.NET MVC 路由如何工作?

    我定义了以下路线 public static void RegisterRoutes RouteCollection routes routes IgnoreRoute resource axd pathInfo routes MapRou
  • C# 'out' 或 'ref' 参数的值何时实际返回给调用者?

    当我向某个人分配任务时out or ref参数 是立即分配给调用者提供的引用的值 或者是out and ref当方法返回时分配给引用的参数值 如果方法抛出异常 是否返回值 例如 int callerOutValue 1 int caller
  • 在 ASP.NET MVC 中设置默认 JSON 序列化器

    我正在开发一个已部分转换为 MVC 的现有应用程序 每当控制器响应 JSON ActionResult 时 枚举都会以数字形式发送 而不是字符串名称 听起来默认的序列化程序应该是 JSON Net 它应该将枚举作为其名称而不是整数表示形式发
  • 如何将Php源代码转换为Asp.net代码

    我正在我的博客上开发一个应用程序 我得到了 php 的源代码 我对 php 没有任何了解 这就是为什么我想将 Php 源代码转换为 Asp net 代码 请提供任何帮助 希望这可以帮助 PHP 到 ASP NET 1 x 迁移助手 http
  • 为什么必须在 C# 中 Close() 文件?

    我知道这可能看起来很愚蠢 但为什么以下代码仅在我 Close 文件时才有效 如果我不关闭文件 则不会写入整个流 Steps 在表单加载时运行此代码 显示后使用鼠标关闭表单 程序终止 当文件对象超出范围时 不应该自动刷新或关闭吗 我是 C 新
  • 从 SpecFlow 设置 Nunit TimeoutAttribute

    我已经使用 SpecFlow 编写了几个长时间运行的端到端集成测试 但由于 Nunit 超时 它们失败了 将 Timeout x 属性添加到 TestFixture 可以解决问题 但当然每次功能更新时都会被覆盖 如何以 SpecFlow 尊
  • qTip2 jquery 与 asp.net 文本框

    我怎样才能实现jquery插件qTip2http craigsworks com projects qtip2 http craigsworks com projects qtip2 与 asp net 文本框 鼠标悬停时的优雅工具提示
  • 我可以根据角色隐藏/显示 asp:Menu 项吗?

    我可以隐藏某些菜单项吗asp Menu基于角色的控制
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • 在 .NET 中,多次调用 string.Replace() 是否比单次调用 Regex 方法效率低?

    我想替换字符串中大约 8 个字符 使用 Regex 方法或仅使用对 string Replace 的多次调用会更有效吗 我将替换可能出现的大约 7 个字符 全部替换为下划线 字符可以出现在字符串中的任何位置 并且不按特定顺序等 除非您确实需
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl

随机推荐