重写Text属性设置为自动微调文本框的值(Override Text Property to aut

2019-10-19 00:20发布

我想覆盖Text的文本框的属性作为自动修整,以将其值设置。 对于这一点,我必须定义下面的类:

public class TextBox : System.Web.UI.WebControls.TextBox
{
    public override string Text
    {
        get { return base.Text.Trim(); }

        //Automatically trim the Text property as it gets assigned
        set { base.Text = value.Trim(); }
    }
}

但问题是,它不工作在设计页面(的.aspx)定义的文本框,它仅适用于动态创建文本框。

我需要这样的代码,返回所有文本框,无论是动态还是静态加入修剪值。

我怎样才能解决这个问题?

Answer 1:

您应该创建一个自定义的控制,并给它一个不同的名称。

[DefaultProperty("Text")]
[ToolboxData("<{0}:TrimmedTextBox runat=server></{0}:TrimmedTextBox>")]
public class TrimmedTextBox : TextBox
{
    [Category("Appearance")]
    public override string Text
    {
            get { return base.Text.Trim(); }
            //Automatically trim the Text property as it gets assigned
            set { base.Text = value.Trim(); }
    }
}

在此之后,打开你的AssemblyInfo.cs,并在底部添加下面一行:

 //[assembly: TagPrefix("yournamespace", "aspCustom")]
 [assembly: TagPrefix("WebformsSandbox", "aspCustom")]
 //change "aspCustom" to the prefix of your choice!

在这之后你的工具应该可以在设计时:

要呼叫标记代码您的自定义元素,无论是从工具箱到代码或写画吧:

<aspCustom:TrimmedTextBox ID="TrimmedTextBox1" runat="server"></aspCustom:TrimmedTextBox>

//编辑我已经发现了另一种可行的解决方案在这里p.campbell : 查找页面中所有文本框控件

这避免了在所有创建自定义元素。 你要做的就是在您的扩展类中定义helpermethod:

public static IEnumerable<Control> FindAll(this ControlCollection collection)
{
    foreach (Control item in collection)
    {
        yield return item;

        if (item.HasControls())
        {
            foreach (var subItem in item.Controls.FindAll())
            {
                yield return subItem;
            }
        }
    }
}

你这样做了之后,你可以遍历网页上的所有TextBox控件和修剪的文字:

foreach (var t in this.Controls.FindAll().OfType<TextBox>())
{ 
    t.Text = t.Text.Trim();
}

您应该能够更通过筛选此Where(t => t.Id.Contains("someValue")或任何你喜欢。

你认为什么更好的给你。



文章来源: Override Text Property to auto trim Textbox value