控制自定义validation程序.NET客户端validation中的名称

我有一个带有三列文本框的gridview。 它可以根据需要包含多行,但通常只有大约5行。 每行都需要validation。

我想创建一个客户端validation器,它将两列相加并将其与第三列进行比较,以检查用户是否正确输入了数据。

万一你想知道,这是规范的一部分,运营商必须进入第三列,而不是简单地将后两个列汇总在后面的代码中。 这样做是为了确保操作员正确地转录信息。

我正在尝试使用.net中的自定义validation器来创建此客户端validation。 但我找不到一种方法来传递三个文本框的名称。 我可以使用ControlToValidate参数给它目标控件名称,但是如何传入另外两个控件ID呢?

我正在寻找’正确’的方法来做到这一点,一个想法是在controltovalidate的名称引用的javascript中创建一个数组。

DC

我解决了这个问题。 不是一个优雅的解决方案,但它有效

首先,我将代码放入页面上的div中

然后我创建了一个JavaScript函数……

 function CheckRow(sender,args) { // get the name of the control to validate try { args.IsValid = true; ctv = sender.controltovalidate; // get the data from the other controls nt = document.getElementById(ctv.replace('_Total','_NonTicket')); t = document.getElementById(ctv.replace('_Total','_Ticket')); if (nt && t) { v1 = Number(nt.value); v2 = Number(t.value); v3 = Number(args.Value); if ((v1 + v2) != v3){ msg = GetMessage(sender); sender.innerHTML = msg.replace("#total#",Number(args.Value)); args.IsValid = false; return false; } } } catch (e) { // something wrong default to server side validation } return true; } 

这是由每个行的自定义validation器调用我使用发送方的controltovalidate参数来获取名称

然后它是一个字符串操作的问题,以获取其他字段的名称。

一旦检索到你可以做你喜欢的,在我的情况下我添加和比较。 如果有错误,则清除Isvalid标志并修改消息以适应。

getmessage函数是必需的,因为我更改了消息以提供更有意义的错误消息

 /* get the error message from the validator store it so it can be retrieved again this is done because the message is altered */ function GetMessage(sender){ msg = window[sender.id+"_msg"]; if (!msg){ msg = sender.innerHTML; window[sender.id+"_msg"] = msg; } return msg; } 

getmessage函数保留原始消息的副本,因此如果用户多次出错,可以以原始forms检索消息,另一方面,当我们第一次编辑消息时,我们会覆盖占位符(#total#)。

DC