Webform属性的内联代码

时间:2009-03-12 15:47:35

标签: asp.net-mvc webforms inline-code

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

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

有没有让这项工作?

6 个答案:

答案 0 :(得分:4)

Asp.net服务器控件无法与&lt;%=一起使用,而是可以执行:

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

聚苯乙烯。您也可以在代码隐藏中设置标签的文本。您的方案可能适用于在PreRenderComplete上设置它。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

最简单的方法是使用数据绑定表达式代替代码渲染块...

<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);
}  

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分: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的灵感!