简单的Web控件无法正确呈现

时间:2011-04-11 10:41:03

标签: c# asp.net web-controls

我有一个简单的网页控件,有点工作。它只是不允许(没有错误)控件中的任何变量被设置,无论我尝试什么,它只是不显示除默认值之外的任何东西。

我的控制:

<%@ 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;
}

我已经检查了,并且if正在触发,它没有抛出任何错误,但是Message类中的所有变量都没有设置!他们只是默认我做的事情。我无法改变他们的任何价值观。

1 个答案:

答案 0 :(得分:2)

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