Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得';controlToValidate';ClientValidationFunction上的属性?_C#_Asp.net_Validation_Customvalidator_Asp.net Validators - Fatal编程技术网

C# 如何获得';controlToValidate';ClientValidationFunction上的属性?

C# 如何获得';controlToValidate';ClientValidationFunction上的属性?,c#,asp.net,validation,customvalidator,asp.net-validators,C#,Asp.net,Validation,Customvalidator,Asp.net Validators,假设我有这个代码 <asp:TextBox ID="TextBox1" runat="server" /> <asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="ValidationFunction1" ControlToValidate="TextBox1" Display="Dynamic" /> 我想知道,在函数中,我是否可以

假设我有这个代码

<asp:TextBox ID="TextBox1" runat="server" />

<asp:CustomValidator ID="CustomValidator1" runat="server"
    ClientValidationFunction="ValidationFunction1"
    ControlToValidate="TextBox1"
    Display="Dynamic" />
我想知道,在函数中,我是否可以让控件验证如下内容:

var v = sender.ControlToValidate;

未验证,只是一个提示:

var v = document.getElementById('<%=CustomValidator1.FindControl(CustomValidator1.ControlToValidate).ClientID>%');
var v=document.getElementById('%');
当然,你可以像这样做:

var v = document.getElementById('<%=TextBox1.ClientID%>');
var v=document.getElementById(“”);
如果你确实知道你在验证什么。当要验证的控件是动态设置的,并且您事先不知道它将是哪个控件时,第一种方法是好的

另外,
FindControl()
可能返回
null
,因此您也需要对其进行测试,以避免出现异常


希望这有帮助。

实际上
发送方。controltovalidate
提供控件的
客户端ID
。所以这似乎是一个解决方案

function ValidationFunction1(sender, args){
    var v = document.getElementById(sender.controltovalidate);
}

我试过了,它对我有效。请通知它是否有效。

以下是我对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>
这两条线是关键

    CustomValidator cv = (CustomValidator)source;
    GridViewRow gvRow = (GridViewRow)cv.NamingContainer;

在我的例子中,NamingContainer将是一个GridViewRow,但它可能是您的整个页面,具体取决于您的程序。无论哪种方式,它都允许我找到我想要的控件,相对于ControlToValidate对象,如前所述,它将返回ClientID。

这是我的简单解决方案,可以访问控件以在客户端进行验证。 添加带有可能需要的选项的常规自定义验证器控件

<asp:CustomValidator ID="cvalShippingRegionCountries" ErrorMessage="Choose a country" ClientValidationFunction="ClientValMultiSelectCountries" runat="server" Display="Dynamic" SetFocusOnError="true" /> 
现在,在处理验证的函数中,您可以访问如下值:

function ClientValMultiSelectCountries(sender, args) {

        var multiselect = $find(sender.attributes.controltovalidateclientid.nodeValue);

        if ( #VALIDATION_CHECK_HERE# ) {
            args.IsValid = false;
        }
    }

您将在函数中获得clientID;)

这真的很有趣,因为我在IE和Chrome上都试过,它们在我的.NET3.5网站上都很好用。请确保您的sender.controltovalidate为小写,因为我还未使用pascalcased controltovalidate定义。是的,像您一样尝试过,但仍然没有成功。声明自定义验证程序标记时设置了哪些属性?已解决!就是这样,可能是以前的代码中的一些东西,但无论如何,这就是解决方案,txs
<asp:CustomValidator ID="cvalShippingRegionCountries" ErrorMessage="Choose a country" ClientValidationFunction="ClientValMultiSelectCountries" runat="server" Display="Dynamic" SetFocusOnError="true" /> 
cvalShippingRegionCountries.Attributes.Add("ControlToValidateClientID", multiselectShippingRegionCountries.ClientID);
function ClientValMultiSelectCountries(sender, args) {

        var multiselect = $find(sender.attributes.controltovalidateclientid.nodeValue);

        if ( #VALIDATION_CHECK_HERE# ) {
            args.IsValid = false;
        }
    }