繁体   English   中英

ASP.NET:代码落后或没有代码落后?

[英]ASP.NET: Code behind or no code behind?

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

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

我讨厌看到那些与标记交叉拼凑的<%%>(服务器端块),哎呀。 我希望这在ASP.NET中仅用于向后兼容Classic ASP,但我总是看到MS中包含那些黄色括号的示例。

我试图理解一个可以在这里下载的代码示例,并解释为什么我执行代码时这里显示的任何服务器端断点都没有中断,即使我看到已经在web.config中设置了。 由于我通常使用代码隐藏,我想知道在aspx中是否有一些关于服务器端代码的处理方式有所不同,这阻止了我调试runat = server代码。

所以。 我的问题是:

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

2)为什么我可能无法打破服务器端逻辑?

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

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

在代码隐藏中使用代码通常不会解决问题 ,而是将意大利面条代码混杂在与传统asp中不同的地方。 .NET确实允许您拥有组织良好的解决方案,但是由您来实现它。 在页面后面的代码中包含代码并不是该旅程中的第一步,只是旅程可以开始的地方。

至于你的事件没有解雇的原因,很可能是:

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

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

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

  1. 可能会禁用调试
  2. 事件没有发生
  3. 标记中没有任何内容告诉控件您的方法是作为事件的处理程序存在的。

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

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

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

很常见的“示例”ASP.NET代码是使用内联代码分发的,因为它更容易以这种方式分发。 它是独立的,您可以将其复制并粘贴到记事本中,将其作为.aspx保存在测试站点的文件夹中,并查看它是如何运行的。 这可能不是你想要在制作中做的事情。

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

事实上,如果你进行任何数据绑定,你将会有一堆EvalBind标签与标记混合在一起。 因此,即使是具有代码隐藏功能的纯WebForms也不总是干净利落。

2)为什么我可能无法打破服务器端逻辑?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM