Как получить свойство 'controlToValidate' на ClientValidationFunction?
Допустим, у меня есть этот код.
<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 ответа:
Фактически
sender.controltovalidate
даетClientID
Управления. Так что это похоже на решение.function ValidationFunction1(sender, args){ var v = document.getElementById(sender.controltovalidate); }
Я попробовал и это сработало для меня. Пожалуйста, сообщите, если это работает.
Не проверено, просто Подсказка:
var v = document.getElementById('<%=CustomValidator1.FindControl(CustomValidator1.ControlToValidate).ClientID>%');
Конечно, вы можете просто сделать это так:
var v = document.getElementById('<%=TextBox1.ClientID%>');
Если вы точно знаете, что вы проверяете. Первый метод хорош, когда проверяемый элемент управления устанавливается динамически, и вы заранее не знаете, какой именно он будет.
Также
FindControl()
может возвращатьnull
, поэтому вам нужно будет проверить и это, чтобы избежать исключения.Надеюсь, это поможет.
Вот мой взгляд на серверное решение в 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.