ASP.NET中的Response.Write是一个坏主意吗?

时间:2009-09-07 04:25:33

标签: asp.net-mvc

我公司的大部分网络编程背景都是PHP,因此ASP.NET MVC是我们最新的Web应用程序的合理选择,它也需要作为单独的Winforms应用程序的后端工作。然而,我们一直在寻找自己走在我们通常在php中遵循的道路 - 回应大量条件输出的标签。这是ASP.NET MVC中的一个坏主意吗?

例如,没有Response.Write:

      <%if (OurUserSession.IsMultiAccount)
        {%>
        <%=Html.ActionLink("SwitchAccount", "Accounts", "Login") %><span>|</span>
      <%}%>

使用Response.Write:

      <%if (OurUserSession.IsMultiAccount)
          Response.Write (Html.ActionLink("Swith Account", "Accounts", "Login") + "<span>|</span>");
      %>

这里的差异相当小,但有时我们的视图逻辑变得更复杂(非常复杂的视图逻辑,即除了布尔值之外,我们只是卸载到控制器)。第二个似乎更容易阅读,但我想看看是否有任何关于此事的想法。

4 个答案:

答案 0 :(得分:5)

正如Mehrdad所说,与Response.Write()相比,没有使用<%= %>的背面。但是,如果您希望使代码更具可读性,可以使用扩展方法:

public static string WriteIf(this HtmlHelper helper, bool condition, string tag) {
    return condition ? tag : "";
}

将使用这样的:

<%= Html.WriteIf(UserSession.IsMultiAccount,
        Html.ActionLink("Swith Account", "Accounts", "Login") + "<span>|</span>") %>

我觉得哪一个更容易阅读,这是一个品味问题。

答案 1 :(得分:2)

不。这不是一个坏主意。从功能上讲,这些片段是等效的。在特定情况下使用最具可读性。

答案 2 :(得分:2)

对于Response.Write,

&lt;%=是完全的简写 - 这两个语句不仅在功能上等同,它们是相同的。

唯一的区别是可读性和简洁性,对于那些曾经使用ASP一段时间的人来说,&lt;%=是好的。一般来说R.Write的重要之处在于你避免使用它来编写字符串文字HTML,因为这很容易受到人为错误的影响。

答案 3 :(得分:0)

这个问题可以从两个方面来解决:

  1. 性能
  2. 可读性/维护
  3. 1。性能

    回到ASP经典时代,每次关闭%>并重新打开<%时,都会有一些脚本处理成本(但处理能力同样有限)。考虑到这一点,如果我们在讨论带有批次元素的foreach循环,我可能会倾向于使用Response.Write

    2。可读性

    与其他意见相比,我个人认为Response.Write 很多可读。我认为新一代编码人员不喜欢它只是因为它让人想起经典版本。

    但我确实非常喜欢 -Tomas Lycken-的回答。似乎是两个世界中最好的。

    每次我使用任何语言进行编码 我尝试不要远离Guido's Python's PEP-8 Styling guidelines,但它有时与.net的C#的冲突

    思考后

    虽然确实提出了一个问题:

    最好是在%> <%=上调用自定义方法吗?