在ascx/aspx文件中使用Asp.net Response.Write

3
<%if (CanRemove) Response.Write("<b>"+ProductName+"</b>"); %>

这段代码让我感到不舒服。具体来说,每当我在ascx或aspx文件中看到调用Response.Write的时候,我就会怀疑我做错了什么。也许这是因为之前使用XSLT时注意到,如果正确使用,很少需要<xsl:text>元素来生成html。我觉得当我的html代码隐藏在<% %>块中时,它干扰了我阅读代码的能力。
这只是我需要习惯Asp.Net还是有更好的方法?

2
将 Response.Write 与声明性 asp:___ 控件混合使用绝对是一种不好的做法。 - Joel Coehoorn
我想Razor也能回答这个问题。:::耸肩::: - Brian
4个回答

7
<% if (CanRemove) { %><b><%= ProductName %></b><% } %>

<%= 等同于 Response.Write。

并且作为格式良好的代码:

<% if (CanRemove) { %>
    <b><%= ProductName %></b>
<% } %>

此外,这是ASP.NET MVC方法。

在我看来并不是这样。Visual Studio 在高亮方面做得很好。 - Daniel A. White
当您需要更长的条件文本块时,这肯定更容易阅读。 - Brian
1
使用MVC一段时间后,我开始将现有的Webforms应用程序修改为这种标记。有人可能会说我正在反对框架,但我发现与在codebehind中使用事件处理程序控制的标签、文字、重复器等相比,它更加简洁。 - Siewers

4
一种替代方法是使用 <asp:Literal> 控件,并将其 Visible 属性绑定(或手动设置)到 CanRemove,其内容为特定文本。
这种方法的优劣取决于应用程序开发的风格。在 ASP.NET MVC 样式应用程序(或直接大量修改 HTML 的应用程序)中,我认为当前的方法更有意义。在 ASP.NET Web 表单和服务器控件应用程序中,<asp:Literal> 解决方案更加一致。

可见属性是通过JavaScript进行修改的。 - Brian
Brian: 怎么可能?<% if (CanRemove) { ... } %>根本不会向客户端输出ProductName。Javascript永远看不到它。 - Mehrdad Afshari
@Mehrdad:具有可见属性的位置也具有div,以便javascript可以看到它们。这些div仅显示可以删除的内容。CanRemove用于指示它是此类属性(在这种情况下,文本的定位被修改,以便所有可移动的内容都被推在一起)。 - Brian
那是另一回事。这个asp:Literal解决方案与您上面写的代码行实际上是相等的。它只是使得服务器控件导向的网页更加一致。 - Mehrdad Afshari

3

看起来你只是在进行一些条件格式设置。如果你愿意,你可以在代码后台做一些这方面的工作。尝试使用标签并针对其执行一些逻辑操作。

<asp:Label id="lblProductName" runat="server" />

在您的代码后台,您可以像这样操作:

lblProductName.Text = ProductName;
lblProductName.Visible = CanRemove;
lblProductName.CssClass = "productLabel";

使用服务器端包含并不是一件可怕的事情,但如果您选择使用CodeBehind,可以使视图逻辑更加清晰分离。


1

我认为最好使用Literal控件,并在代码后台类的Page_Load或OnLoad方法中设置其Text属性。

protected void Page_Load(object sender, EventArgs e)
{
  if (CanRemove)
  {
    myLiteral.Text = "<b>ProductName</b>"
  }
}

此外,System.Web.UI.WebControls.Literal控件有一个名为Mode的属性,可以控制呈现方式:
  1. PassThrough - 控件的内容不会被修改;
  2. Encode - 控件的内容将转换为HTML编码字符串(可防止跨站脚本攻击)。
  3. Transform - 不支持的标记语言元素将从控件的内容中删除。如果Literal控件在支持HTML或XHTML的浏览器上呈现,则不会修改控件的内容。
请查看MSDN在线文档以获取Literal类的链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接