假设我有这段代码。
<asp:TextBox ID="TextBox1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server"
ClientValidationFunction="ValidationFunction1"
ControlToValidate="TextBox1"
Display="Dynamic" />
验证功能:
function ValidationFunction1(sender, args)
{
}
我想知道,在函数内部,我可以让Control来验证类似的东西:
var v = sender.ControlToValidate;
答案 0 :(得分:29)
实际上sender.controltovalidate
给出了控件的ClientID
。所以这似乎是一个解决方案。
function ValidationFunction1(sender, args){
var v = document.getElementById(sender.controltovalidate);
}
我试过,它对我有用。如果有效,请通知。
答案 1 :(得分:1)
未经核实,只是提示:
var v = document.getElementById('<%=CustomValidator1.FindControl(CustomValidator1.ControlToValidate).ClientID>%');
当然你可以这样做:
var v = document.getElementById('<%=TextBox1.ClientID%>');
如果你确切知道你正在验证什么。当要动态设置要验证的控件并且您事先不知道它将是哪一个时,第一种方法是好的。
同样FindControl()
可能会返回null
,因此您也需要对其进行测试以避免异常。
希望这有帮助。
答案 2 :(得分:0)
以下是我对C#服务器端解决方案的看法,以模仿上述答案,对于任何感兴趣的人:
<asp:TextBox ID="txtStudentComments" runat="server"
Rows="8" Width="100%"
ToolbarCanCollapse="False" ValidationGroup="vg1" />
<asp:CustomValidator ID="cv1" runat="server" ControlToValidate="txtStudentComments"
ErrorMessage="THESE COMMENTS DO NOT SEEM RIGHT. PLEASE REVIEW THEM AGAIN!" SetFocusOnError="true"
Font-Bold="True" Font-Size="Medium" ValidationGroup="vg1" OnServerValidate="cv1_ServerValidate"></asp:CustomValidator>
在服务器上:
//validate of the comment contains some specific words which imply the TET has not reviewed the comments!
protected void cv1_ServerValidate(object source, ServerValidateEventArgs args)
{
CustomValidator cv = (CustomValidator)source;
GridViewRow gvRow = (GridViewRow)cv.NamingContainer;
TextBox editor = (TextBox)gvRow.FindControl("txtStudentComments");
if (editor.Text.ToUpper().Contains("FACILITATOR TO INSERT COMMENTS HERE PLEASE"))
args.IsValid = false;
else
args.IsValid = true;
}
这两条线是它的关键。
CustomValidator cv = (CustomValidator)source;
GridViewRow gvRow = (GridViewRow)cv.NamingContainer;
在我的情况下,NamingContainer将是一个GridViewRow,但它可能是您的整个页面,具体取决于您的程序。无论哪种方式,它允许我找到我想要的控件,相对于ControlToValidate对象,如上所述将返回ClientID。
答案 3 :(得分:0)
这是我能够访问控件以在客户端进行验证的简单解决方案。 添加带有您可能需要的选项的常规自定义验证器控件。
<asp:CustomValidator ID="cvalShippingRegionCountries" ErrorMessage="Choose a country" ClientValidationFunction="ClientValMultiSelectCountries" runat="server" Display="Dynamic" SetFocusOnError="true" />
然后,在后面的代码中,只需添加一个自定义属性来存储要验证的控件的 clientID。
cvalShippingRegionCountries.Attributes.Add("ControlToValidateClientID", multiselectShippingRegionCountries.ClientID);
现在,在处理验证的函数中,您可以像这样访问值:
function ClientValMultiSelectCountries(sender, args) {
var multiselect = $find(sender.attributes.controltovalidateclientid.nodeValue);
if ( #VALIDATION_CHECK_HERE# ) {
args.IsValid = false;
}
}
您将在函数中获得 clientID ;)