メッセージリストコントロール
メッセージを手軽に扱うためのカスタムコントロール。
コード
MessageList.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Web.UI; using System.Web.UI.WebControls; namespace Sample.Controls { [DefaultProperty("Items")] [ParseChildren(true, "Items")] [PersistChildren(false)] public class MessageList : CompositeControl { public MessageList() { this._items = new List<Message>(); } private readonly List<Message> _items; [MergableProperty(false)] [PersistenceMode(PersistenceMode.InnerDefaultProperty)] public List<Message> Items { get { return this._items; } } protected override HtmlTextWriterTag TagKey { get { return HtmlTextWriterTag.Ul; } } public void ShowMessage(string messageId) { this.SetVisibleOfMessage(messageId, true); } public void HideMessage(string messageId) { this.SetVisibleOfMessage(messageId, false); } public void ShowAllMessages() { this.SetVisibleOfAllMessages(true); } public void HideAllMessages() { this.SetVisibleOfAllMessages(false); } private void SetVisibleOfMessage(string messageId, bool visible) { Message target = this._items.Find(item => string.Equals(item.ID, messageId, StringComparison.Ordinal)); target.Visible = visible; } private void SetVisibleOfAllMessages(bool visible) { this._items.ForEach(item => item.Visible = visible); } protected override void CreateChildControls() { foreach (Message item in this._items) { this.Controls.Add(item); } } } }
Message.cs
using System; using System.Web.UI; using System.Web.UI.WebControls; namespace Sample.Controls { public class Message : WebControl { public Message() : base(HtmlTextWriterTag.Li) { } public string Text { get { return (this.ViewState["Text"] as string) ?? string.Empty; } set { this.ViewState["Text"] = value; } } public void Show() { this.Visible = true; } protected override void RenderContents(HtmlTextWriter writer) { writer.Write(this.Text); } } }
使用例
Execute.aspx (1)
<%@ Register Assembly="Sample" Namespace="Sample.Controls" TagPrefix="my" %>
Execute.aspx (2)
<my:MessageList runat="server" ID="_errorMessageList" CssClass="ErrorMessageList"> <my:Message runat="server" ID="_hogeErrorMessage" Text="Hoge です。" /> <my:Message runat="server" ID="_fugaErrorMessage" Text="Fuga です。" /> <my:Message runat="server" ID="_piyoErrorMessage" Text="Piyo です。" /> </my:MessageList>
Execute.css
.ErrorMessageList li { color: Red; }
Execute.aspx.cs
protected void Page_Load(object sender, EventArgs e) { this._errorMessageList.HideAllMessages(); } protected void _okButton_Click(object sender, EventArgs e) { FooFacade.ResultOfExecute result = this._facade.Execute(); switch (result) { case (FooFacade.ResultOfExecute.Success): this.Response.Redirect("~/Foo/Complete.aspx", false); break; case (FooFacade.ResultOfExecute.Hoge): this._hogeErrorMessage.Show(); break; case (FooFacade.ResultOfExecute.Fuga): this._fugaErrorMessage.Show(); break; case (FooFacade.ResultOfExecute.Piyo): this._piyoErrorMessage.Show(); break; default: throw new ApplicationException(); } }