是否有.aspx页面中字符串替换的最佳实践?

时间:2009-03-25 13:11:53

标签: c# asp.net data-binding templates replace

我有一个.aspx页面设置。我有很多需要更换的占位符。名字,姓氏,城市,州等等。如何以有效的方式实现这一目标?

放下一堆......

<asp:Label runat="server" id="Label_FirstName" Text="" />

...无处不在?

或者有没有办法在正常页面区域中使用数据绑定语法:

<% FirstName %>

提前致谢!

9 个答案:

答案 0 :(得分:8)

请注意

<asp:Label runat="server" id="Label_FirstName" Text="" />

将转义您的字符串(例如,将&lt;和&gt;替换为&amp; lt;和&amp; gt;),但

<%= FirstName %>

不会。如果这样你的意图很好,但要注意你可以为XSS attacks打开一个频道。要正确地转义字符串,您可能需要

<%= System.Web.HttpUtility.HtmlEncode(FirstName) %>

代替。

答案 1 :(得分:3)

你当然可以使用:

<%= FirstName %>

其中FirstName是页面的属性。它不一定是该类中的属性,您可以从该行访问几乎任何东西。

更新:正如DrJokepu所指出的,如果您显示的数据来自用户输入,则会打开XSS漏洞。正如所指出的,你使用HtmlEncode来避免这种情况,在这种情况下,更短的语法将是:

<%= Server.HtmlEncode(FirstName) %>

如果你有一个基页,你可以定义一个方法并逃脱:

<%= HtmlEncode(FirstName) %>

如果您使用asp.net标签,请在适当的位置执行EnableViewState = false,这样您就可以避免发送/接收不必要的视图状态。


格式化使用ids / css类,并在css样式表中使用样式。无论内容是否是动态的,都可以通过浏览器缓存css。


对于信息列表,您可以使用ListView或Repeater,并仍然控制将通过网络发送的特定html。

答案 2 :(得分:1)

你绝对可以使用ASP风格的标签(<%= %>),但我认为你的第一种方法更清洁,更容易维护。当您使用ASP样式标记时,您将不会进行数据绑定,而是可以访问页面的所有成员(包括字段,属性和其他方法)。

因此,如果FirstName是您正在处理的网页上的字段或属性,则这两种方法都有效。我个人认为基于控制的方法更好,但每个人都有。

答案 3 :(得分:1)

我喜欢使用标签,因为它更容易弄乱颜色,字体,粗体等......以显示错误或吸引用户注意某些文本。

我通常在代码隐藏中只有一个设置方法。

if(!Page.IsPostBack)
        SetupForm();

SetupForm()
{
    Label_FirstName.Text = firstName;

}

答案 4 :(得分:0)

如果您想要更多地控制HTML,可以使用一堆标签或Substitution控件甚至Literal Text。

您可以在标记中使用代码,如:

&LT;%= this.FirstName%GT;

这将导致在页面上调用名为FirstName的属性,并将其返回值放在标签之间。

答案 5 :(得分:0)

这取决于您将使用它们的上下文。通常使用asp:label控件很好,因为您可以从页面上的代码隐藏中访问它们。数据绑定方法通常在数据绑定控件(如DataGrid或Repeater)中使用。

数据绑定方法的真正问题在于没有很好的IDE支持。要使其工作,您必须在页面类上拥有一个属性,您需要在后面的代码中填充,但如果属性名称更改,您还必须确保更新您的aspx页面。如果使用标签方法,IDE将检测标签名称是否有更改,或者是否已完全删除并给出编译时错误。

或者,您可以使用jQuery填充数据,并使用spans作为占位符。请注意,jQuery需要一些不同的方式来考虑您的页面,因为它使用javascript来填充您的字段。

答案 6 :(得分:0)

杰夫阿特伍德在Coding Horror探讨了这个主题并发现了表现just doesn't matter ......

注意:看起来好像杰夫的帖子必须带着一丝盐,毕竟...抱歉在没有阅读评论的情况下急于回答

答案 7 :(得分:0)

我的经验法则是:

  • 如果我正在标记输入控件,我使用Label以便我可以设置AssociatedControlID属性。
  • 否则我使用LiteralLocalize控件。我通常不直接设置标签样式,所以我不需要在其他情况下产生额外的标记。

所以,在你的情况下,我可能会使用Literal控件。

答案 8 :(得分:-2)

试试这个:

<%= FirstName %>