我曾在接受采访时被问及“在aspx页面中使用C#代码内联的原因是什么”。我无法回答,所以我很好奇。为什么要这样做而不是使用代码?有技术原因吗?
答案 0 :(得分:7)
编写内联代码并不是一般推荐的做法,因为 WebForms会大量使用生成HTML输出的“控件”,并且表示逻辑处理将由他们处理。例如,要迭代数据数组,您宁愿使用asp:Repeater
而不是foreach
循环。在这种情况下使用循环会闻起来很糟糕,并且当标记和代码像意大利面一样混合时,会提醒经典的ASP时代。我只能想到使用Response.Write
内联来输出调试消息。
这是完全不同的情况。因为MVC不鼓励使用“控件”来支持干净的手工编码HTML标记,所以内联代码是为模型视图生成HTML的首选方法。当然,它还取决于您在内联代码中的具体操作。我的经验法则是使用内联代码,当控制器可以轻松获得渲染视图所需的所有数据时。内联代码应该只包含表示逻辑,例如根据条件显示或隐藏字段,从资源获取字符串,枚举模型中的数组等。您永远不应该从视图中与数据库交谈 - 这是什么控制器是为了。
有些人don't feel comfortable在ASP .NET MVC中使用内联代码,因为他们在编写WebForms时已经了解到“内联代码不好”。这是一种误解,我对它的回答是内联代码只有在执行除表示逻辑之外的其他内容时才会出错。在WebForms中,这个逻辑由MVC中的控件处理 - 由内联代码处理,所以这里没有真正的问题。
答案 1 :(得分:2)
我会回答陈规定型的“它取决于”......
如果它是一个纯粹的View问题,我会写内联C#(并经常这样做)。 这是MVC应用程序的一个常见模式,通过在视图中使用简单的C#来完成与复杂的显示相关的事情。
如果有问题的代码严格涉及将数据呈现到页面内联C#可能是最简单和最简单的解决方案(除非您使用WebForms,其中没有什么是简单的)。如果代码与渲染数据没有严格的关系,我会从处理部分中分离渲染部分,并且只在视图中使用渲染代码。