gpt4 book ai didi

c# - 自定义 ASP.NET Web 控件 TextBox

转载 作者:行者123 更新时间:2023-11-30 20:57:31 25 4
gpt4 key购买 nike

我需要制作一个自定义文本框,它接受文本或数字。在 PostBack 之后,我想检查该值,如果它不是数字 - 在 TextBox 后面白色一个跨度,上面写着“不是数字!”。我创建了一个属性 Number,它检查值,如果一切正常 - 将其放入 View 状态,否则,写入字符串“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}&nbsp;</span><br />", notNumber);
base.Render(writer);
}

protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Number);
}
}
}

问题:如您所见,我只能从 Text 属性获取写入 TextBox 的值。有什么方法可以编写代码,将值设置为我的属性数字而不是文本?以及如何使显示的不是文本属性而是数字?

最佳答案

是的,您需要覆盖TextBoxLoadPostData 方法,该方法实际上来自于实现IPostBackDataHandler。 .这发生在页面生命周期的早期,实际上控件从那里获取其 Text 属性。

在那里,您可以直接从请求参数中获取值。

但是,由于您正在扩展文本框,因此您将始终拥有 text 属性。干净的版本意味着扩展 Control 并自己进行输入渲染。您可以完全删除 Text 属性,只保留 Number 属性。

代码会更清晰,更易于阅读。但这当然意味着更多的工作。请注意,如果您直接扩展 Control,则需要实现 IPostBackDataHandler。该界面基本上告诉页面您的控件回发数据并且需要以不同方式处理。

关于c# - 自定义 ASP.NET Web 控件 TextBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com