2

我有一个 .aspx 页面设置。我有很多占位符需要更换。名字,姓氏,城市,州等。我如何以有效的方式进行此操作?

丢一堆...

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

...到处?

或者有没有办法在普通页面区域使用数据绑定语法:

<% FirstName %>

提前致谢!

4

9 回答 9

8

注意

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

将转义您的字符串(例如,将 < 和 > 替换为 < 和 >),但是

<%= FirstName %>

将不会。如果这是您的意图,那很好,但请注意,您可能会为XSS 攻击打开通道。为了正确地转义你的字符串,你可能想要

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

反而。

于 2009-03-25T13:18:47.737 回答
3

你当然可以使用:

<%= FirstName %>

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

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

<%= Server.HtmlEncode(FirstName) %>

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

<%= HtmlEncode(FirstName) %>

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


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


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

于 2009-03-25T13:15:23.830 回答
1

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

FirstName因此,如果是您正在处理的页面上的字段或属性,这两种方法都将起作用。我个人发现基于控制的方法更好,但每个人都有自己的想法。

于 2009-03-25T13:15:36.840 回答
1

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

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

if(!Page.IsPostBack)
        SetupForm();

SetupForm()
{
    Label_FirstName.Text = firstName;

}
于 2009-03-25T13:16:23.687 回答
0

如果您想对 HTML 进行更多控制,可以使用一堆标签或替换控件,甚至是文字文本。

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

<%=this.FirstName%>

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

于 2009-03-25T13:15:30.990 回答
0

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

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

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

于 2009-03-25T13:18:23.527 回答
0

Jeff Atwood 在Coding Horror中探索了这个主题,发现性能并不重要......

注意:似乎杰夫的帖子必须用一粒盐来处理,毕竟......很抱歉在没有阅读评论的情况下匆忙回答

于 2009-03-25T13:26:54.693 回答
0

我的经验法则是:

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

因此,在您的情况下,我可能会使用 Literal 控件。

于 2009-03-25T14:27:37.043 回答
-2

试试这个:

<%= FirstName %>
于 2009-03-25T13:16:22.597 回答