2011-04-11 56 views
0

我有一个简单的网页控件,它的工作原理有点类似。它只是不允许(没有错误)设置控件中的任何变量,无论我尝试什么,它只是不显示除默认值之外的任何内容。简单的网页控件无法正确呈现

我的控制:

<%@ 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类中的变量都不会设置!他们只是默认我做的任何事情。我无法改变他们的任何价值观。

回答

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

Brilliant this works thanks – 2011-04-11 11:10:57