Простое веб-управление не рендерится должным образом - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть простой веб-контроль, который работает, вроде.Он просто не позволяет (без ошибок) устанавливать любую переменную в элементе управления, что бы я ни пытался, просто не отображает ничего кроме значений по умолчанию.

Мой элемент управления:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Message.ascx.cs" Inherits="Message" %>

<asp:Panel runat="server" ID="ErrorPanel">

    <asp:Literal
        runat="server"
        ID="MessageTextLit"    
    />

</asp:Panel>

/// <summary>
/// The type of the message, good, bad etc.
/// </summary>
public enum MessageType
{
    Good,
    Error
}

public partial class Message : System.Web.UI.UserControl
{
    public string MessageText { get; set; }         // Text of the error message
    public MessageType Type { get; set; }           // Message type

    protected void Page_Load(object sender, EventArgs e)
    {
        MessageTextLit.Text = MessageText;

        // Set correct CSS class
        if (Type == MessageType.Good)
            ErrorPanel.CssClass = "good-box";
        else if (Type == MessageType.Error)
            ErrorPanel.CssClass = "bad-box";

    }
}

На моей странице это выглядит как:

<CrystalControls:Message runat="server" ID="TopMessage" Visible="false" />

Затем, когда нажимается кнопка, я делаю:

if (QuestionSubject.Length < 5)
{
    TopMessage.MessageText = "Soemthing message";
    TopMessage.Type = MessageType.Error;
    TopMessage.Visible = true;
}
else if (QuestionBody.Length < 10)
{
    TopMessage.MessageText = "Error message";
    TopMessage.Type = MessageType.Error;
    TopMessage.Visible = true;
}

Я проверил, и если они стреляют, он не выдаетошибки, но ни одна из переменных в классе Message никогда не устанавливается!Они просто по умолчанию, что бы я ни делал.Я не вижу возможности изменить их значения.

1 Ответ

2 голосов
/ 11 апреля 2011

Page_Load слишком рано, чтобы делать это.

Обычно мы делаем такие вещи в OnPreRender , таким образом, если любое из ваших свойств будет изменено в течение жизненного цикла, выподберет правильные значения.

protected override void OnPreRender(EventArgs e)
{         
  MessageTextLit.Text = MessageText;          // Set correct CSS class         
  if (Type == MessageType.Good)              
      ErrorPanel.CssClass = "good-box";         
  else if (Type == MessageType.Error)             
      ErrorPanel.CssClass = "bad-box";      
} 
...