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

时间:2009-06-09 14:17:57

标签: asp.net

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

这段代码让我觉得难看。更具体地说,每当我在ascx或aspx文件中看到对Response.Write的调用时,我都会怀疑我做错了什么。也许这是因为之前使用XSLT并注意到正确完成后,很少需要<xsl:text>元素来生成html。当我的html代码隐藏在<% %>块中时,我觉得它会干扰我读取代码的能力。

这是我需要习惯使用Asp.Net还是有更好的方法来做到这一点?

4 个答案:

答案 0 :(得分:6)

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

<%=等同于Response.Write。

以及格式良好的代码:

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

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

答案 1 :(得分:4)

另一种方法是使用<asp:Literal>控件并将其Visible属性绑定(或手动设置)为CanRemove,并将其内容绑定到特定文本。

这种方法是好还是坏取决于开发应用程序的样式。在ASP.NET MVC样式的应用程序(或那些直接大量修改HTML的应用程序)中,我认为当前的方法更有意义。在基于ASP.NET Web表单和服务器控件的应用程序中,<asp:Literal>解决方案更加一致。

答案 2 :(得分:3)

看起来你只是在做一些条件格式化。如果你愿意的话,你可以在代码隐藏中做一些。尝试使用Label并对其做一些逻辑。

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

在您的代码隐藏中,您可以执行以下操作:

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

使用服务器端包含进行操作并不是一件可怕的事情,但如果您愿意,可以利用代码隐藏来更清晰地分离视图逻辑。

答案 3 :(得分: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. 编码 - 控件的内容将转换为HTML编码的字符串(可以帮助您防止跨站点脚本编写)。
  3. 转换 - 从控件的内容中删除不支持的标记语言元素。如果在支持HTML或XHTML的浏览器上呈现Literal控件,则不会修改控件的内容。
  4. 查看文字课程link

    的MSDN在线文档