【发布时间】:2013-05-27 16:43:06
【问题描述】:
我需要制作一个自定义文本框,它接受文本或数字。在 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?以及如何使显示的不是文本属性而是数字?
【问题讨论】:
标签: c# asp.net web-controls