4

我有一个 Asp.Net 中继器,其中包含一个文本框和一个复选框。我需要添加客户端验证,以验证选中复选框时,文本框只能接受零值或空白值。

我想使用一个或多个 Asp.Net 的验证器控件来完成此操作,为客户端错误提供一致的显示(服务器端错误由另一个子系统处理)。

Asp:CompareValidator 似乎不够灵活,无法执行这种复杂的比较,所以我只看 Asp:CustomValidator。

我遇到的问题是似乎没有任何方法可以将自定义信息传递到验证函数中。这是一个问题,因为复选框和文本框的 ClientId 在运行时对我来说是未知的(因为它们是中继器的一部分)。

所以......我的选择似乎是:

  1. 以某种方式将文本框和复选框传递给 CustomValidator(似乎不可能)。
  2. 根据 CustomValidator 传入的参数,通过 JavaScript 查找 TextBox。这甚至可能吗? ClientId 不明确怎么办?
  3. 完全忘记验证,并发出自定义 JavaScript(允许我将两个 ClientId 都传递给自定义函数)。

关于什么可能是更好的实现方式的任何想法?

4

2 回答 2

2

我认为最好的方法是在新类中继承 BaseValidator,并将这些 ID 作为属性传递给您的控件。您应该能够在验证器中解析 ID,而无需知道在运行时生成的完整客户端 ID。您应该首先在服务器上验证数据,然后在客户端上验证。

于 2008-09-17T22:38:54.303 回答
0

不能把 CustomValidator 放在中继器里面吗?如果没有,您可以在绑定转发器和用户 FindControl() 时动态创建它

protected MyDataBound(object sender, RepeaterItemEventArgs e) {
  (CheckBox)cb = (CheckBox)e.Item.FindControl("myCheckboxName");
  (TextBox)tb = (TextBox)e.Item.FindControl("myTextBox");
}

...或类似的东西。我在脑海中完成了代码。

于 2008-09-17T22:34:50.770 回答