gpt4 book ai didi

c# - 如何验证复合控件

转载 作者:行者123 更新时间:2023-11-30 15:01:39 25 4
gpt4 key购买 nike

好吧,这有点复杂。

我有一个复合控件,其中包含文本框、必填字段验证器和一个按钮。它公开了一个名为 ValidationGroup 的属性。

它将 ValidationGroup 属性应用于文本框、必填字段验证器和按钮。

一切正常。

当我取出按钮并将其放在具有相同验证组的表单中时,问题就开始了。

理想情况下它应该有效。但事实并非如此。有人说复合控件有自己的命名容器,所以这行不通。

如果这是真的,我不明白为什么?我的意思是他们有相同的验证组!

无论如何,有人知道如何解决这个问题吗?

这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FCC.Web.UI.CustomControl;
using System.Xml;

namespace FCC.Web.UI.CustomControl
{
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[DefaultProperty("Value")]
[ValidationProperty("Value")]
[ToolboxData("<{0}:ValidationTextBox runat=server></{0}:ValidationTextBox>")]
public class ValidationTextBox : CompositeControl, IDynamicControl
{

#region-- privatess --
private TextBox textBox1;
private RequiredFieldValidator requiredFieldValidator1;
private RegularExpressionValidator regularExpressionValidator1, maxlengthValidator,integerValidator,decimalValidator;
private string validationClasses, validationGroup, validationExpression, xmlElementName;
private bool isRequired;
private int maxlength;
#endregion

#region-- properties -- The following properties are deleted to child controls

#region-- textbox --

[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
[Description("Text displayed on the textbox")]
public string Value
{
get
{
EnsureChildControls();
return textBox1.Text;
}
set
{
EnsureChildControls();
textBox1.Text = value;
}
}

[Bindable(true)]
[Category("Styles")]
[Themeable(true)]
[DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)]
[PersistenceMode(PersistenceMode.InnerProperty)]
[Localizable(true)]
public Style TextBoxStyle
{
get
{
EnsureChildControls();
return textBox1.ControlStyle;
}
set
{
EnsureChildControls();
//textBox1.Attributes["style"] = value;
textBox1.ControlStyle.MergeWith(value);
}
}

[Bindable(true)]
[Category("Styles")]
[Localizable(true)]
public string TextBoxCssClass
{
get
{
EnsureChildControls();
return textBox1.CssClass;
}
set
{
EnsureChildControls();
textBox1.CssClass = value;
}
}

[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public TextBoxMode TextMode
{
get
{
EnsureChildControls();
return textBox1.TextMode;
}
set
{
EnsureChildControls();
textBox1.TextMode = value;
}
}

[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
public int MaxLength
{
get
{
EnsureChildControls();
return maxlength;
}
set
{
EnsureChildControls();

if (value > 0)
{
maxlength = value;

textBox1.MaxLength = value;

maxlengthValidator.Enabled = true;

//maxlengthValidator.ValidationExpression = "^[a-zA-Z.]{0," + value + "}$";
maxlengthValidator.ValidationExpression = @"^[\s\S]{0," + value + "}$";
maxlengthValidator.ErrorMessage = "Maximum allowed charaters: " + value;
}
}
}

[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
public bool IsInteger
{
get
{
EnsureChildControls();
return integerValidator.Enabled;
}
set
{
EnsureChildControls();

if (value == true) // Is Integer
{
integerValidator.Enabled = true;
regularExpressionValidator1.Enabled = false;
maxlengthValidator.Enabled = false;
decimalValidator.Enabled = false;
}
else
{
integerValidator.Enabled = false;
}
}
}

[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
[Description("Error message that appears when textbox contain invalid integer")]
public string InvalidIntegerErrorMessage
{
get
{
EnsureChildControls();
return integerValidator.ErrorMessage.IsNullOrEmpty() ? "Invalid Number" : integerValidator.ErrorMessage;
}
set
{
EnsureChildControls();
integerValidator.ErrorMessage = value;
}
}

[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
public bool IsDecimal
{
get
{
EnsureChildControls();
return decimalValidator.Enabled;
}
set
{
EnsureChildControls();
if (value == true)
{
decimalValidator.Enabled = true;
integerValidator.Enabled = false;
regularExpressionValidator1.Enabled = false;
maxlengthValidator.Enabled = false;
}
else
{
decimalValidator.Enabled = false;
}
}
}


[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
[Description("Error message that appears when textbox contain invalid decimal number")]
public string InvalidDecimalErrorMessage
{
get
{
EnsureChildControls();
return decimalValidator.ErrorMessage.IsNullOrEmpty() ? "Invalid Number" : decimalValidator.ErrorMessage;
}
set
{
EnsureChildControls();
decimalValidator.ErrorMessage = value;
}
}


[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
[Description("Name of XmlElement")]
public string XmlElementName
{
get
{
EnsureChildControls();
return xmlElementName;
}
set
{
EnsureChildControls();
xmlElementName = value;
}
}

[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
public string XmlElements
{
get
{
EnsureChildControls();
return string.Format("<{0}>{1}</{0}>",XmlElementName,textBox1.Text);
}
}

#endregion

#region--required validation --

[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
[Description("Error message that appears when text box is empty")]
public String RequiredErrorMessage
{
get
{
EnsureChildControls();
return requiredFieldValidator1.ErrorMessage.IsNullOrEmpty() ? "Required Field" : requiredFieldValidator1.ErrorMessage;
}
set
{
EnsureChildControls();
requiredFieldValidator1.ErrorMessage = value;
}
}

[Bindable(true)]
[Category("Default")]
[Localizable(true)]
[Description("bool, representing text in the textbox is required field or not")]
public bool IsRequired
{
get
{
EnsureChildControls();
return isRequired;
}
set
{
EnsureChildControls();
isRequired = value;
requiredFieldValidator1.Enabled = value;
}
}

#endregion

#region-- regular expression validation --

[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
[Description("Error message that appears when textbox contain invalid format string")]
public String RegularExpressionErrorMessage
{
get
{
EnsureChildControls();
return regularExpressionValidator1.ErrorMessage.IsNullOrEmpty() ? "Invalid Text" : regularExpressionValidator1.ErrorMessage;
}
set
{
EnsureChildControls();
regularExpressionValidator1.ErrorMessage = value;
}
}

[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
[Description("Regular expression. Leave blank if you dont want to implement.")]
public string RegularExpression
{
get
{
EnsureChildControls();
return validationExpression;
}
set
{
EnsureChildControls();

validationExpression = value;
regularExpressionValidator1.ValidationExpression = value;
regularExpressionValidator1.Enabled = true;

integerValidator.Enabled = false;
decimalValidator.Enabled = false;
}
}

#endregion

#region--common--
[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
[Description("cssClasses that apply to all validators")]
public string ValidationErrorCssClass
{
get
{
EnsureChildControls();
return validationClasses;
}
set
{
EnsureChildControls();
validationClasses = value;

requiredFieldValidator1.CssClass = value;
regularExpressionValidator1.CssClass = value;
maxlengthValidator.CssClass = value;
}
}

[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
[Description("Validation group for the textbox and inbuilt validations")]
public string ValidationGroup
{
get
{
EnsureChildControls();
return validationGroup;

}
set
{
EnsureChildControls();
validationGroup = value;

requiredFieldValidator1.ValidationGroup = value;
regularExpressionValidator1.ValidationGroup = value;
maxlengthValidator.ValidationGroup = value;
textBox1.ValidationGroup = value;
}
}
#endregion

#endregion

#region -- blank properties--
public string EmptyText { get; set; }
public string CommaSeparatedData { set; get; }
public bool ShowDefaultItem { get; set; }
public string DropDownCssClass { get; set; }
#endregion

protected override void RecreateChildControls()
{
EnsureChildControls();
}

protected override void CreateChildControls()
{
Controls.Clear();

#region--textbox--
textBox1 = new TextBox();
textBox1.ID = "textbox1";
//textBox1.CssClass = TextBoxClass;
textBox1.Style[HtmlTextWriterStyle.VerticalAlign] = "middle";

//if (!validationGroup.IsNullOrEmpty())
//{
// textBox1.ValidationGroup = validationGroup;
//}
#endregion

#region--required field validator--
requiredFieldValidator1 = new RequiredFieldValidator();
requiredFieldValidator1.ID = "validator1";
requiredFieldValidator1.ErrorMessage = RequiredErrorMessage;
requiredFieldValidator1.CssClass = validationClasses;
requiredFieldValidator1.Display = ValidatorDisplay.Dynamic;
requiredFieldValidator1.ControlToValidate = textBox1.ID;
requiredFieldValidator1.Enabled = false;
requiredFieldValidator1.SetFocusOnError = true;
//if (isRequired)
//{
// requiredFieldValidator1.Enabled = true;
//}

//if (!validationGroup.IsNullOrEmpty())
//{
// requiredFieldValidator1.ValidationGroup = validationGroup;
//}

#endregion

#region-- regular expression validator--
regularExpressionValidator1 = new RegularExpressionValidator();
regularExpressionValidator1.ID = "validator2";
regularExpressionValidator1.Enabled = false;
regularExpressionValidator1.ErrorMessage = RegularExpressionErrorMessage;
regularExpressionValidator1.CssClass = validationClasses;
regularExpressionValidator1.Display = ValidatorDisplay.Dynamic;
regularExpressionValidator1.ControlToValidate = textBox1.ID;
regularExpressionValidator1.SetFocusOnError = true;
//if (!validationGroup.IsNullOrEmpty())
//{
// regularExpressionValidator1.ValidationGroup = validationGroup;
//}
#endregion

#region -- maxlength validation --
maxlengthValidator = new RegularExpressionValidator();
maxlengthValidator.ControlToValidate = textBox1.ID;
maxlengthValidator.ID = "validator3";
maxlengthValidator.Enabled = false;
maxlengthValidator.CssClass = validationClasses;
maxlengthValidator.Display = ValidatorDisplay.Dynamic;
maxlengthValidator.SetFocusOnError = true;

//if (!validationGroup.IsNullOrEmpty())
//{
// maxlengthValidator.ValidationGroup = validationGroup;
//}

#endregion

#region--integer Validation--
integerValidator = new RegularExpressionValidator();
integerValidator.ID = "integervalidator";
integerValidator.Enabled = false;
integerValidator.ErrorMessage = InvalidIntegerErrorMessage;
integerValidator.CssClass = validationClasses;
integerValidator.Display = ValidatorDisplay.Dynamic;
integerValidator.ControlToValidate = textBox1.ID;
integerValidator.SetFocusOnError = true;
integerValidator.ValidationExpression=@"^\d+$";
#endregion

#region -- decimal validation--
decimalValidator = new RegularExpressionValidator();
decimalValidator.ID = "decimalvalidator";
decimalValidator.Enabled = false;
decimalValidator.ErrorMessage = InvalidDecimalErrorMessage;
decimalValidator.CssClass = validationClasses;
decimalValidator.Display = ValidatorDisplay.Dynamic;
decimalValidator.ControlToValidate = textBox1.ID;
decimalValidator.SetFocusOnError = true;
decimalValidator.ValidationExpression = @"(^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\d*\.\d*$)";

#endregion

this.Controls.Add(textBox1);
this.Controls.Add(requiredFieldValidator1);
this.Controls.Add(regularExpressionValidator1);
this.Controls.Add(maxlengthValidator);
this.Controls.Add(integerValidator);
this.Controls.Add(decimalValidator);
}

protected override void OnLoad(EventArgs e)
{
EnsureChildControls();
base.OnLoad(e);
}

protected override void Render(HtmlTextWriter writer)
{
AddAttributesToRender(writer);

textBox1.RenderControl(writer);
requiredFieldValidator1.RenderControl(writer);
regularExpressionValidator1.RenderControl(writer);
maxlengthValidator.RenderControl(writer);
integerValidator.RenderControl(writer);
decimalValidator.RenderControl(writer);

}
}
}

最佳答案

我不知道为什么会发生这种情况的答案,但是您可以通过向 Control 添加一个公共(public)方法来解决问题,该方法将其验证作为 bool 返回,然后在页面中添加一个 CustomValidator 并输入如下内容:

args.IsValid = yourControl.publicMethod()  

在其中,我现在无法对其进行测试,但我敢打赌它应该会起作用。

关于c# - 如何验证复合控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883017/

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