Встроенный код в свойстве веб-формы - PullRequest
3 голосов
/ 12 марта 2009

Почему при рендеринге не отображаются дата / время?

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

Есть ли способ заставить это работать?

Ответы [ 6 ]

4 голосов
/ 12 марта 2009

Серверные элементы управления Asp.net плохо работают с <% =, вместо этого вы можете сделать: </p>

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

Ps. Вы также можете установить текст метки в коде. Для вашего сценария может быть полезно установить его в PreRenderComplete.

3 голосов
/ 12 марта 2009

Я не уверен, есть ли у вас код за файлом, но если вам действительно нужно установить свойство Text метки в разметке .aspx, вы можете добавить следующий код на страницу:

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

Таким образом, вы можете поддерживать состояние элемента управления меткой при обратной передаче.

1 голос
/ 07 ноября 2012

Поместите встроенный код в тег метки, как показано ниже,

< asp:Label ID="Lbl" runat="server" Text="">
<%= DateTime.Now.ToString() %>
< /asp:Label>
1 голос
/ 12 марта 2009

Самый простой способ сделать это - использовать выражение привязки данных вместо блока рендеринга кода ...

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

Теперь свойство Text будет устанавливаться всякий раз, когда вызывается Page.DataBind (), поэтому в вашем коде позади вы захотите что-то вроде

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

   base.OnPreRender(e);
}  
0 голосов
/ 12 марта 2009

Реальная проблема здесь заключается в том, что мне нужно установить свойство 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());
     %>

Но это не сработает, если вам нужен контроль для поддержания состояния.

UPDATE:

После изучения ответа Кева я нашел еще лучшее решение. У меня нет кода позади (это страница MVC), но вы все равно можете ссылаться на элемент управления на странице через блок кода, поэтому мое новое решение заключается в следующем. Примечание. Чтобы это работало, сначала нужно разместить блок кода.

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

Спасибо за вдохновение, Кев!

0 голосов
/ 12 марта 2009

Ну, теги asp отображаются. Вы должны будете установить свойство во время выполнения. или просто сделай <%= DateTime.Now.ToString() %>.

...