【问题标题】:Get source control in OnServerValidate method在 OnServerValidate 方法中获取源代码控制
【发布时间】:2011-12-27 05:23:17
【问题描述】:

我有一个 CustomValidator 控件,并且在 OnServerValidate 事件中我想设置正在验证的控件的属性。

您可能认为经过验证的控件对象在 OnServerValidate 事件中可用,但事实并非如此。然后我尝试执行 FindControl,但似乎无法访问 ControlToValidate 值。

有人可以帮我验证 TextBox 控件,以便我可以通过 OnServerValidate 事件修改其属性吗?

谢谢, D

【问题讨论】:

  • 如果您知道正在验证什么控件,为什么不能直接访问它?它是嵌套在数据绑定控件还是什么的?
  • 我正在尝试创建一个“通用”CustomValidator,即使它会被许多不同的控件使用。
  • @JamesJohnson 我有同样的问题,我不能硬编码控件的原因是因为我想对三个不同的字段使用相同的验证函数。

标签: c# asp.net validation customvalidator


【解决方案1】:

我尝试了上述答案,但由于我的 TextBox 位于 ContentPlaceHolder 的 ListView 中,这一切都有些失控了。我最终使用了它,它应该适用于所有情况:

string textBoxName = ((CustomValidator)source).ControlToValidate;
var textBox = ((CustomValidator)source).Parent.FindControl(textBoxName) as TextBox;

【讨论】:

  • 非常感谢您在这方面的帮助。
【解决方案2】:

你能做这样的事情吗?

protected void CustomValidator1_ServerValidate (object source, ServerValidateEventArgs args)
{
   var validationControl = source as CustomValidator;

   var textBox = FindControl(validationControl.ControlToValidate) as TextBox;

   if (textBox != null)
   {
      // Do something
   }
}

【讨论】:

  • 略有不同,但你明白了!! ContentPlaceHolder placeholder = Master.FindControl("placeholder_content") as ContentPlaceHolder; CustomValidator 验证控件 = 作为 CustomValidator 的源; TextBox textBox = placeholder.FindControl(validationControl.ControlToValidate) as TextBox;如果(文本框!= null){}
【解决方案3】:

获取价值:

string number = args.Value;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多