我有一个简单的网页控件,有点工作。它只是不允许(没有错误)控件中的任何变量被设置,无论我尝试什么,它只是不显示除默认值之外的任何东西。
我的控制:
<%@ 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
类中的所有变量都没有设置!他们只是默认我做的事情。我无法改变他们的任何价值观。
答案 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";
}