C# 验证错误的自定义格式&;控件树问题-ASP.NET

C# 验证错误的自定义格式&;控件树问题-ASP.NET,c#,asp.net,validation,web-controls,C#,Asp.net,Validation,Web Controls,我有一个网络控制库,我用它来渲染我们的样式化表单元素。该库还包含一些重写的验证器,因此在一起使用时,我可以呈现出比默认验证器的红星相邻字段更好的验证HTML/CSS。也就是说,我想突出显示整行 在最基本的层次上,“表单行”可以呈现: 外部 (从那里,有各种额外的哨声,关联的控制ID…) 我遇到的问题是,当让控件创建自己的重写验证器(例如,使用IsRequiredField属性控制)时,我无法让验证器的ControlToValidate以控件本身为目标 这似乎是验证器的目标 Contr

我有一个网络控制库,我用它来渲染我们的样式化表单元素。该库还包含一些重写的验证器,因此在一起使用时,我可以呈现出比默认验证器的红星相邻字段更好的验证HTML/CSS。也就是说,我想突出显示整行

在最基本的层次上,“表单行”可以呈现:

  • 外部
(从那里,有各种额外的哨声,关联的控制ID…)

我遇到的问题是,当让控件创建自己的重写验证器(例如,使用IsRequiredField属性控制)时,我无法让验证器的ControlToValidate以控件本身为目标

这似乎是验证器的目标 ControlToValidate需要在控制树中处于同一级别。 我无法将其添加到家长的 控制树 CreateChildControls,因为它给出了一个错误

。。。我有一节课是这样的:

[DefaultProperty("Value"), ValidationProperty("Value")]  
public class BasicTextInputLine : WebControl, INamingContainer  
{  
  ...
  private Label _someLabel;
  private TextBox _someTextBox;
  private MyRequiredFieldValidator _someValidator;

  public string Value  
  public bool IsRequiredField  
  ...  
}  
(注意-ValidationProperty(“Value”)标志允许验证器指向它)

我可以很高兴地在标记中这样工作:

<custom:BasicTextInputLine ID="foo" ... />
<custom:MyRequiredFieldValidator ControlToValidate="foo" ... />
将其添加到控件会导致无法找到控件ToValidate的错误

protected override void CreateChildControls()
{
  ...
  Controls.Add(_someValidator);
}
我如何构造它,让BasictExitPutLine创建它自己的验证器,并让它验证自己,而不是它的内部文本框


非常感谢。

我不确定是否完全理解这个问题,但在我解释您的代码片段时,您在这里混合了两个概念:

  • BasicTestInputLine直接包含验证器。我特别通过类中的变量导出该信息:

    私有MyRequiredFieldValidator\u someValidator

    您正在尝试将其添加到子控件列表中

  • 验证器是一个完全分离的控件,它引用主基本行。我可以在您的标记中看到:

  • 我认为这两种方法相互矛盾,你有两种选择:

  • 坚持方法1。在这种情况下,您应该在代码中创建验证器实例,并删除标记部分

  • 坚持方法2。在这种情况下,BasictExitPutLine类不需要知道验证器,即移除类内的变量,而不将其创建为子控件。你根本不需要它


  • 我不确定我是否完全理解这个问题,但在我解释您的代码片段时,您在这里混合了两个概念:

  • BasicTestInputLine直接包含验证器。我特别通过类中的变量导出该信息:

    私有MyRequiredFieldValidator\u someValidator

    您正在尝试将其添加到子控件列表中

  • 验证器是一个完全分离的控件,它引用主基本行。我可以在您的标记中看到:

  • 我认为这两种方法相互矛盾,你有两种选择:

  • 坚持方法1。在这种情况下,您应该在代码中创建验证器实例,并删除标记部分

  • 坚持方法2。在这种情况下,BasictExitPutLine类不需要知道验证器,即移除类内的变量,而不将其创建为子控件。你根本不需要它

  • protected override void CreateChildControls()
    {
      ...
      Parent.Controls.Add(_someValidator);
    }
    
    protected override void CreateChildControls()
    {
      ...
      Controls.Add(_someValidator);
    }