17

このコードがあるとしましょう。

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

<asp:CustomValidator ID="CustomValidator1" runat="server"
    ClientValidationFunction="ValidationFunction1"
    ControlToValidate="TextBox1"
    Display="Dynamic" />

そしてvalidationFunction:

function ValidationFunction1(sender, args)
{
}

そして、関数内でコントロールを次のように検証できるかどうかを知りたいです。

var v = sender.ControlToValidate;
4

4 に答える 4

29

実際にコントロールsender.controltovalidateを与えClientIDます。したがって、これは解決策のようです。

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

私は試しましたが、うまくいきました。動作する場合はお知らせください。

于 2010-09-03T14:12:49.520 に答える
1

検証されていません。ヒントだけです:

var v = document.getElementById('<%=CustomValidator1.FindControl(CustomValidator1.ControlToValidate).ClientID>%');

もちろん、次のように簡単に実行できます。

var v = document.getElementById('<%=TextBox1.ClientID%>');

何を検証しているのか正確にわかっている場合。最初の方法は、検証するコントロールが動的に設定されていて、それがどれになるか事前にわからない場合に適しています。

また、FindControl()返される可能性がnullあるため、例外を回避するためにもテストする必要があります。

お役に立てれば。

于 2010-09-03T14:03:47.477 に答える
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;
    }

この2行が肝心です。

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

私の場合、NamingContainer は GridViewRow になりますが、プログラムによってはページ全体になる可能性があります。どちらの方法でも、前述のように ClientID を返す ControlToValidate オブジェクトに関連して、必要なコントロールを見つけることができます。

于 2017-01-19T02:43:03.003 に答える