C# 自定义验证器.NET客户端验证中的控件名称

C# 自定义验证器.NET客户端验证中的控件名称,c#,.net,javascript,validation,customvalidator,C#,.net,Javascript,Validation,Customvalidator,我有一个包含三列文本框的gridview。它可以根据需要有任意多行,但通常只有大约5行。每一行都需要验证 我想创建一个客户端验证器,将两列相加,并将其与第三列进行比较,以检查用户是否正确输入了数据 如果您想知道,这是规范的一部分,操作员必须输入第三列,而不是在后面的代码中将前两列相加。这样做是为了确保操作员正确地转录信息 我正在尝试使用.net中的自定义验证器来创建此客户端验证。但是我找不到一种方法来传递三个文本框的名称。 我可以使用ControlToValidate参数为其指定目标控件名称,但

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

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

如果您想知道,这是规范的一部分,操作员必须输入第三列,而不是在后面的代码中将前两列相加。这样做是为了确保操作员正确地转录信息

我正在尝试使用.net中的自定义验证器来创建此客户端验证。但是我找不到一种方法来传递三个文本框的名称。 我可以使用ControlToValidate参数为其指定目标控件名称,但是如何传入其他两个控件id

我正在寻找“正确”的方法来实现这一点,一个想法是用javascript创建一个数组,由controltovalidate的名称引用


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

首先,我将代码放在页面上的一个div中

<div align="right"><asp:CustomValidator ID="RowValidator" runat="server"
ErrorMessage="Total of #total# does not equal 1st Preference + Ticket"
ControlToValidate="Total" ValidateEmptyText="True" 
ClientValidationFunction="CheckRow" SetFocusOnError="True" EnableClientScript="True"
enableViewState="False" Display="Dynamic"></asp:CustomValidator></div>
对于我使用发送方的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函数保留原始消息的副本,因此,如果用户多次出错,可以以原始形式检索消息,否则在我们第一次编辑消息时,会覆盖占位符(#total#)

直流电

/*
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;
}