jQuery UIスタイリングの助けを借りてメッセージを表示するための非常に単純なASP.NETユーザーコントロールを構築しています。ユーザーコントロール、すべてがnullを返す
私は別のWebプロジェクトを作成しました。これはサイトプロジェクトによって参照されています。
私はこのように、web.configファイルでそれを参照:
<pages>
<controls>
<add tagPrefix="uc" namespace="Website.Main.UserControls" assembly="Website.Main.UserControls" />
</controls>
</pages>
は、次にテストページでは、私はこのようにそれをインスタンス化:
<uc:StatusMessage ID="Test" runat="server" Type="Help" Text="testing.." />
ここで制御
using System;
namespace Website.Main.UserControls
{
public partial class StatusMessage : System.Web.UI.UserControl
{
public enum MessageType
{
Error,
Notice,
Help,
Info,
Success
}
public string Text
{
get { return Message.Text; }
set
{
Message.Text = value;
}
}
private MessageType _type;
public MessageType Type
{
get { return _type; }
set
{
_type = value;
if (_type == MessageType.Error)
{
MessageContainer.Attributes["class"] = "ui-icon ui-icon-alert";
MessageIcon.Attributes["class"] = "ui-state-error ui-corner-all";
}
else
{
MessageIcon.Attributes["class"] = "ui-state-highlight ui-corner-all";
if (_type == MessageType.Notice)
{
MessageContainer.Attributes["class"] = "ui-icon ui-icon-notice";
}
else if (_type == MessageType.Help)
{
MessageContainer.Attributes["class"] = "ui-icon ui-icon-help";
}
else if (_type == MessageType.Info)
{
MessageContainer.Attributes["class"] = "ui-icon ui-icon-info";
}
else if (_type == MessageType.Success)
{
MessageContainer.Attributes["class"] = "ui-icon ui-icon-check";
}
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
public void SetText(string text, MessageType type = MessageType.Info)
{
Text = text;
Type = type;
StatusMessagePanel.Update();
}
}
}
ためのコードです
マークアップ
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="StatusMessage.ascx.cs" Inherits="Website.Main.UserControls.StatusMessage" %>
<asp:UpdatePanel ID="StatusMessagePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="ui-widget">
<div style="margin-top: 20px; padding-left: 7px; padding-top: 7px;" class="ui-state-highlight ui-corner-all" id="MessageContainer" runat="server">
<p>
<span style="float: left; margin-top: 4px; margin-right: .3em;" class="ui-icon ui-icon-info" id="MessageIcon" runat="server"></span>
<asp:Label ID="Message" runat="server"></asp:Label>
</p>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
問題は、このコントロールのコードビハインドに到達するたびに、つまりページがレンダリングされて属性を取得するときに、すべてのucメンバがnull
になります。すなわち、Message
,MessageContainer
,MessageIcon
およびStatusMessagePanel
はすべてnull
です。
私はこの現象の原因を知りません。アップデートパネルを削除しようとしましたが、何も変わりません。
ページにキャッシュがありますか? – Aristos
ゲッターがnullをチェックせず、デフォルト値を提供していないため、ビューステートが使用されていないので、すべての負荷でプロパティを設定する必要があります。私が何かを見逃してしまったら、すみませんモバイルで表示しているため、すべてのコードを見ることができません。 –