テキストまたは数値を受け取るカスタム TextBox を作成する必要があります。PostBack の後、値を確認したいのですが、それが数値でない場合は、TextBox の後ろに "Not Digits!" という言葉でスパンを白くします。値をチェックするプロパティ Number を作成し、問題がなければビューステートに入れ、それ以外の場合は文字列「Not Digits!」を書き込みます。ここにコード:
namespace NumericTextBoxLibraryV2
{
[DefaultProperty("Number")]
[ToolboxData("<{0}:NumericTextBox runat=server></{0}:NumericTextBox>")]
public class NumericTextBox : TextBox
{
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
if(!Int32.TryParse(value, out number))
notNumber = "Digits only!";
}
}
[Bindable(true)]
[Category("Appearance")]
//[DefaultValue("")]
//[Localizable(true)]
public int Number
{
get
{
if(ViewState["Number"] == null)
{
ViewState["Number"] = 0;
}
number = (int)ViewState["Number"];
return number;
}
set
{
Match match = Regex.Match(value.ToString(), @"^\d+$");
if (match.Success)
{
ViewState["Number"] = value;
notNumber = string.Empty;
}
else
{
notNumber = "Digits only!";
}
}
}
private int number;
private string notNumber;
protected override void Render(HtmlTextWriter writer)
{
writer.Write(@"<span>{0} </span><br />", notNumber);
base.Render(writer);
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Number);
}
}
}
質問:ご覧のとおり、Text プロパティからのみ TextBox に書き込まれた値を取得できます。値を Text ではなく、プロパティ Number に設定するコードを記述する方法はありますか? また、Text プロパティではなく Number を表示するにはどうすればよいですか?