2011-07-17 11 views
0

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です。

私はこの現象の原因を知りません。アップデートパネルを削除しようとしましたが、何も変わりません。

+0

ページにキャッシュがありますか? – Aristos

+0

ゲッターがnullをチェックせず、デフォルト値を提供していないため、ビューステートが使用されていないので、すべての負荷でプロパティを設定する必要があります。私が何かを見逃してしまったら、すみませんモバイルで表示しているため、すべてのコードを見ることができません。 –

答えて

2

web.configファイルを使用すると、サーバーWebコントロールのみを登録できます。しかし、ユーザーコントロールの場合は、それらのコントロールが使用されている各ページにレジスタータグを追加する必要があります。このように:<%@ Register TagPrefix="uc" TagName="StatusMessage " Src="~/UserControls/StatusMessage .ascx" %>