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

Bee*_*eep 4 asp.net-mvc

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

例如,没有Response.Write:

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

使用Response.Write:

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

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

Tom*_*han 5

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

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

哪个会像这样使用:

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

我想,哪个更容易阅读,这是一个品味问题.

  • 哦,圣洁的废话!我从来没有想过像这样使用aspx页面的扩展......我将不得不调查它!我有很多有条件的块! (2认同)