- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,这有点复杂。
我有一个复合控件,其中包含文本框、必填字段验证器和一个按钮。它公开了一个名为 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/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!