为什么渲染时不显示日期/时间?
<asp:Label runat="server" ID="test" Text="<%= DateTime.Now.ToString() %>" ></asp:Label>
有没有办法使这项工作?
为什么渲染时不显示日期/时间?
<asp:Label runat="server" ID="test" Text="<%= DateTime.Now.ToString() %>" ></asp:Label>
有没有办法使这项工作?
Asp.net 服务器控件不能很好地与 <%= 配合使用,您可以这样做:
<span><%= DateTime.Now.ToString() %></span>
附言。您也可以在代码隐藏上设置标签的文本。在 PreRenderComplete 上设置它可能适用于您的场景。
我不确定您是否有代码隐藏文件,但如果您确实需要Text
在 .aspx 标记中设置标签的属性,您可以在页面中添加以下代码:
<script runat="server">
protected override void OnPreLoad(EventArgs e)
{
if (!Page.IsPostBack)
{
this.test.Text = DateTime.Now.ToString();
base.OnPreLoad(e);
}
}
</script>
这样,您可以在回发时维护标签控件的状态。
将内联代码放在标签的标签内,如下所示,
< asp:Label ID="Lbl" runat="server" Text="">
<%= DateTime.Now.ToString() %>
< /asp:Label>
但这里真正的问题是我需要在标记页面上使用代码设置 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的灵感!
那么asp标签被渲染了。您必须在运行时设置该属性。或者只是做<%= DateTime.Now.ToString() %>
.
完成这项工作的最简单方法是使用数据绑定表达式代替代码渲染块......
<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);
}