<%if (CanRemove) Response.Write("<b>"+ProductName+"</b>"); %>
这段代码让我觉得难看。更具体地说,每当我在ascx或aspx文件中看到对Response.Write的调用时,我都会怀疑我做错了什么。也许这是因为之前使用XSLT并注意到正确完成后,很少需要<xsl:text>
元素来生成html。当我的html代码隐藏在<% %>
块中时,我觉得它会干扰我读取代码的能力。
这是我需要习惯使用Asp.Net还是有更好的方法来做到这一点?
答案 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的属性,可以控制渲染:
查看文字课程link
的MSDN在线文档