7

我有一个具有 Title 属性的自定义服务器控件。使用控件时,我想在 aspx 页面中设置标题的值,如下所示:

<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content
</cc1:customControl>

但是,当我这样做时,我得到的是确切的字符串 <%= PagePropertyValue%> 正在显示,而不是我希望看到的属性值。

所以在尝试了数据绑定表达式之后(如下所示)。我没有得到看起来很糟糕的字符串文字,但我也没有得到任何其他东西。

<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content
</cc1:customControl>

我需要对我的自定义控件做些什么来获取这种值?或者我需要对页面做些什么。

4

5 回答 5

7

你不能。<%= %> 将字符串直接写入响应流,这发生在构造服务器控件之后。请参阅此帖子以获取解释。

因此,正如 Zachary 所建议的那样,它要么是代码隐藏,要么是 <%# + 数据绑定。

于 2008-12-22T20:09:43.733 回答
2

作为我自己的问题的后续,我发现我真正想要的是使用 <%$ 语法使用 ASP.NET 表达式,因为我想要做的是放入本地化的内容中。

这可以在服务器控制端显然没有额外处理的情况下完成。

<cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
more content and controls
</cc1:customControl>

这工作得很好。

于 2008-12-29T21:13:22.723 回答
1

尝试使用数据绑定语法: <%# PagePropertyValue %>

于 2008-12-22T20:00:15.530 回答
1

为了使绑定属性值按照建议正常工作,您将在 aspx 或 ascx 文件中拥有它:

<cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
more content
</cc1:customControl>

然后,您将需要在页面中实际绑定数据,您必须将其添加到文件后面的代码中(C# 中的代码)

protected void Page_Load(object sender, EventArgs e)
{
    DataBind();
}

这样,它将绑定您的 ascx 或 aspx 文件中的数据。

于 2008-12-22T20:56:50.563 回答
0

请注意,这是特定于控件属性的。当在控制属性之外使用 <%= 语法时,这意味着页面中的其他任何地方语法都按预期工作。所以这个 <%=GetCapitalUserName()%> 会调用正确的方法并将调用的结果注入到页面中。

于 2009-05-19T22:44:19.490 回答