验证动态控件

时间:2009-07-22 10:54:12

标签: c# asp.net validation

好的,我使用的控件存在一个主要问题。

我正在做的网站使用自定义单位进行结帐时的某些字段(为了上帝的缘故,谁决定马匹应该在中进行测量?!),我们必须能够验证根据所选择的单位,即它们可以有15到40只手(或者其他东西),它们是200 - 900厘米(这些数字是完全随机的)。

通常,这将使用服务器端验证进行验证,以允许我们处理当前单位,适当地转换输入并与动态限制进行比较。

不幸的是,这些控件在页面加载时被动态呈现到页面上,因此服务器端验证没有触发,因为它们在回发时技术上不存在。

我打算避免这种情况的目的是使用我们之前使用过的另一种方法,类似于标准的正则表达式验证程序但是被黑客攻击以允许代码隐藏(我没有写它但它们似乎有效)。 / p>

然而,这不在页面上,所以我需要通过HttpContext或其他方法访问页面对象,以便从相关的下拉列表中获取正确的单位,任何人都可以建议这样做或者验证控件的更好方法是什么?

哦,是的,这是非常令人费解和随意的。

干杯,艾德

1 个答案:

答案 0 :(得分:3)

这里有几点要说:首先,你可以从动态生成的控件中获得回发,只要你在每个回发事件开始时使用一致的ID重新生成它们,一旦你有了重新创建它们ASP.NET将重新连接ViewState和诸如此类的东西,然后在此之后触发你的回调方法。

接下来,您可以使用ASP.NET ajax框架使用一些javascript(实际上它变成一个迷你Web服务)在您的页面类上调用静态方法。结帐this链接有关如何操作。这可能使您能够编写一些javascript来调用服务器端的validate方法。它只是静态的,所以你必须从客户端代码传递你需要的所有数据。

最后,您可以拥有多个正则表达式验证器,每个单元一个,然后在单位字段的onchanged事件中使用一些javascript来启用/禁用正确的。我自己没有这样做,但我相信你可以通过javascript轻松关闭验证器。 (结帐this链接)