5

为什么有人不想使用文件隐藏代码,以便将服务器端代码与标记分开?这不应该是 .NET 相对于经典 ASP 的优势之一吗?

就个人而言,我认为将代码与标记混合会使代码更难理解。

我讨厌看到那些该死的 <% %> (服务器端块)与标记相互拼接,哎呀。我希望这在 ASP.NET 中只是为了与经典 ASP 向后兼容,但我总是看到 MS 的示例,其中包括那些黄色括号。

我正在尝试理解一个可在此处下载的代码示例,并且对为什么执行代码时此处显示的任何服务器端中断都没有中断感到困惑,即使我看到已在 web.config 中设置了该中断。由于我通常使用代码隐藏,因此我想知道 aspx 中的服务器端代码是否有一些处理方式不同的东西,这会阻止我调试 runat=server 代码。

所以。我的问题是:

1)为什么有人不想使用文件隐藏代码,以便将服务器端代码与标记分开?

2)为什么我不能打破服务器端的逻辑?

您对我的任何相关评论也欢迎您的见解和意见。

4

6 回答 6

9

使用内联代码功能<% %>不仅是为了向后兼容,而且是 .NET 的一项功能,它可以允许一些(相对!)清晰和直接的解决方案。然而,它经常以不太理想的方式使用。同样,如果经常(实际上通常)以不太理想的方式使用代码隐藏中的代码,Web 控件也是如此。

在代码隐藏中包含代码通常不会用于分离关注点,而是将混乱的意大利面条代码放在与我们在经典 asp 中不同的地方。.NET 确实允许您拥有组织良好的解决方案,但实现它取决于您。在页面后面的代码中编写代码并不是该旅程的第一步,而是该旅程可以开始的地方。

至于为什么您的事件没有触发,很可能是:

  • 该事件实际上并未被触发。(您是否更改了下拉列表中的选定项目,以实际触发该事件?)
  • 您实际上并没有连接事件。在该控件的属性窗口中,列出的事件函数名称是否与相关事件相对应?(这是最直接的方法;例如,您也可以在 vb 中使用句柄键)
  • 通常当我的事件没有触发时,这是因为我在做一些愚蠢的事情,比如没有启动我的代码,或者我的 url 指向错误的地方。
于 2010-01-20T00:16:05.680 回答
2

1) 我想如果你习惯于开发经典的 ASP,那么它是一个简单的过渡。

2)如果没有看到您的标记,我将无法告诉您您的问题是什么。如果您没有达到该断点,可能有以下几个原因之一:

  1. 调试可能被禁用
  2. 活动未进行
  3. 您的标记中没有任何内容告诉控件您的方法作为事件的处理程序存在。
于 2010-01-20T00:14:29.300 回答
2

大多数 MS 示例中使用的括号通常用于函数调用或引用数据绑定器。

例如,<%# Databinder.Eval("MyColumn") %>将用于中继器。

还有一些标签用于引用 web.config 属性,如连接字符串 <%$ConnectionStrings:NorthwindConnection %>

于 2010-01-20T00:15:45.383 回答
1

很多时候,“示例”ASP.NET 代码与内联代码一起分发,因为这样分发更容易。它是独立的,您只需将其复制并粘贴到记事本中,将其另存为 .aspx 文件保存在测试站点的文件夹中,然后查看它是如何运行的。这可能不是你想在生产中做的事情。

至于更一般的问题...... ASP.NET MVC 在技术上仍然是 ASP.NET 并且不使用代码隐藏文件。许多开发人员认为代码隐藏文件只是将一种丑陋换成了另一种丑陋。就个人而言,我可以从两面来看,但我认为经典 ASP 中如此糟糕的代码的真正原因不是标签汤,而是人们在“查看”代码中做一些疯狂的事情,比如打开数据库连接. 只要你不做那种事情,几个服务器标签根本不是什么大问题。

事实上,如果您进行任何数据绑定,您将在标记中混入一堆Eval和标签。Bind因此,即使是带有代码隐藏的纯 WebForms 也并不总是干净利落的。

于 2010-01-20T00:15:11.013 回答
0

2)为什么我不能打破服务器端的逻辑?

当您开始调试时,构建可能会失败,并且您没有注意到选择运行以前的构建。您的断点可能不存在于该构建中。

于 2011-10-14T13:59:42.400 回答
0

<%# DataBinder.Eval("Column") %>可以从后面的代码中为您节省很多额外的代码,而且在我看来这并不是那么糟糕的做法。

于 2011-10-14T14:12:23.767 回答