Как получить свойство controlToValidate для ClientValidationFunction? - PullRequest
17 голосов
/ 03 сентября 2010

Допустим, у меня есть этот код.

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

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

И функция проверки:

function ValidationFunction1(sender, args)
{
}

И я хотел бы знать, если внутри функции я смогу получить контроль для проверкичто-то вроде:

var v = sender.ControlToValidate;

Ответы [ 3 ]

29 голосов
/ 03 сентября 2010

На самом деле sender.controltovalidate дает ClientID элемента управления.Так что это похоже на решение.

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

Я пытался, и это сработало для меня.Пожалуйста, сообщите, если это работает.

1 голос
/ 03 сентября 2010

Не проверено, только подсказка:

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

конечно, вы можете просто сделать это так:

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

если вы точно знаете, что вы проверяете. Первый способ хорош, когда проверяемый элемент управления устанавливается динамически, и вы заранее не знаете, каким он будет.

Также FindControl() может возвращать null, поэтому вам придется проверить это тоже, чтобы избежать исключения.

Надеюсь, это поможет.

0 голосов
/ 19 января 2017

Вот мое решение на стороне сервера в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...