为什么要使用c#内联代码?

本文关键字:代码 为什么 | 更新日期: 2023-09-27 18:03:52

我曾经在一次面试中被问到"在aspx页面中使用c#内联代码的原因是什么"。我答不上来,所以我很好奇。为什么要这样做而不是使用后台代码呢?有技术上的原因吗?

为什么要使用c#内联代码?

For asp.net WebForms

通常不建议编写内联代码,因为WebForms大量使用生成HTML输出的"控件",而表示逻辑预计将由它们处理。例如,要对数据数组进行迭代,您宁愿使用asp:Repeater而不是foreach循环。在这种情况下使用循环会让人感觉很糟糕,并且会让人想起经典的ASP时代,那时标记和代码就像意大利面一样混合在一起。我只能想到使用Response.Write内联输出调试消息。

For asp.net MVC

这里的情况完全不同。因为MVC不鼓励使用"控件"来支持干净的、手工编码的HTML标记,所以内联代码是为模型视图生成HTML的首选方式。当然,这也取决于您在内联代码中具体做了什么。我的经验法则是,当控制器提供了呈现视图所需的所有数据时,请使用内联代码。内联代码应该只包含表示逻辑,例如根据条件显示或隐藏字段、从资源中获取字符串、枚举模型中的数组等。你永远不应该从视图与数据库对话——这就是控制器的作用。

有些人在asp.net MVC中使用内联代码感到不舒服,因为他们在编程WebForms时已经知道"内联代码是不好的"。这是一种误解,我的答案是内联代码只有在它做其他事情而不是表示逻辑时才不好。在WebForms中,这个逻辑是由控件处理的,在mvc中是由内联代码处理的,所以这里没有真正的问题。

我的回答是"视情况而定"。

如果是纯粹的视图问题,我会写内联c#(并且经常这样做)。在MVC应用程序中,通过在视图中使用简单的c#来做复杂的显示相关的事情是一种常见的模式。

如果所讨论的代码严格涉及到将数据呈现到页面上,内联c#很可能是最简单和最容易的解决方案(除非您使用WebForms,那里没有什么是简单的)。如果代码与呈现数据没有严格的关系,我会将呈现部分与处理部分分开,并且只在视图中使用呈现代码。