3

为什么渲染时不显示日期/时间?

<asp:Label runat="server" ID="test" Text="<%= DateTime.Now.ToString() %>" ></asp:Label>

有没有办法使这项工作?

4

6 回答 6

4

Asp.net 服务器控件不能很好地与 <%= 配合使用,您可以这样做:

<span><%= DateTime.Now.ToString() %></span>

附言。您也可以在代码隐藏上设置标签的文本。在 PreRenderComplete 上设置它可能适用于您的场景。

于 2009-03-12T15:52:29.353 回答
3

我不确定您是否有代码隐藏文件,但如果您确实需要Text在 .aspx 标记中设置标签的属性,您可以在页面中添加以下代码:

<script runat="server">
    protected override void OnPreLoad(EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            this.test.Text = DateTime.Now.ToString();
            base.OnPreLoad(e);
        }
    }
</script>

这样,您可以在回发时维护标签控件的状态。

于 2009-03-12T17:04:05.003 回答
1

将内联代码放在标签的标签内,如下所示,

< asp:Label ID="Lbl" runat="server" Text="">
<%= DateTime.Now.ToString() %>
< /asp:Label>
于 2012-11-07T12:03:00.617 回答
0

但这里真正的问题是我需要在标记页面上使用代码设置 WebControl 的属性。我发现这样做的唯一方法是将整个控件放在代码块中。它不是优雅的或建议的,但是当所有其他方法都失败时,这将起作用。

    <%
        var stringBuilder = new StringBuilder();
        var stringWriter = new StringWriter(stringBuilder);
        var htmlWriter = new HtmlTextWriter(stringWriter);
        var label = new Label { Text = DateTime.Now.ToString() };
        label.RenderControl(htmlWriter);
        Response.Write(stringBuilder.ToString());
     %>

但是,如果您需要控件来维护状态,这将不起作用。

更新:

在研究了 Kev 的答案后,我确实找到了更好的解决方案。我没有后面的代码(它是一个 MVC 页面),但您仍然可以通过代码块引用页面上的控件,因此我的新解决方案如下。注意 - 您必须先放置代码块才能使其工作。

 <%
    lblTest.Text = DateTime.Now.ToString();
 %>
<asp:label runat="server" ID="lblTest" />

感谢Kev的灵感!

于 2009-03-12T16:07:57.180 回答
0

那么asp标签被渲染了。您必须在运行时设置该属性。或者只是做<%= DateTime.Now.ToString() %>.

于 2009-03-12T15:49:43.387 回答
0

完成这项工作的最简单方法是使用数据绑定表达式代替代码渲染块......

<asp:Label runat="server" ID="test" Text="<%# DateTime.Now.ToString() %>" ></asp:Label>

现在,每当调用 Page.DataBind() 时都会设置 Text 属性,因此在您的代码隐藏中,您将需要类似

protected override void OnPreRender(EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DataBind();
    }

   base.OnPreRender(e);
}  
于 2009-03-12T17:13:55.353 回答