2011-06-20 14 views
5

Mam niestandardowy przycisk przesyłania w moim formularzu ASP.NET wzdłuż linii.Wywołaj wymagany walidator pól za pomocą javascript

<a class="button" href="#" onclick="this.blur();SubmitForm();"><span>Submit</span></a> 

Z tego powodu mój wymagany walidator pól nie jest wywoływany po stronie klienta. W jaki sposób można wywołać wymagany weryfikator pól za pośrednictwem Javascript?

Czy istnieje lepszy sposób na wykonanie tego, co próbuję wykonać?

Odpowiedz

9

można wykorzystywać w wybudowanym funkcji stronie klienta o nazwie Page_ClientValidate dla this.Check z poniższym fragmencie kodu na odniesienie

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ClientSide_Validation.aspx.cs" 
    Inherits="ClientSide_Validation" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     function performCheck() { 

      if (Page_ClientValidate()) { 
      } 

     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="lbl1" runat="server" Text="Please enter some value"></asp:Label> 
     <asp:TextBox ID="txtbox1" runat="server"></asp:TextBox> 
     <asp:RequiredFieldValidator ID="valReq" ControlToValidate="txtbox1" runat="server" 
      ErrorMessage="*" Display="Dynamic"> 
     </asp:RequiredFieldValidator> 
     <input type="button" id="btnValidate" value="Submit" onclick="performCheck()" /> 
     <a href="#" onclick="performCheck();">Validate</a> 
    </div> 
    </form> 
</body> 
</html> 
+0

Spowoduje to problem, jeśli masz wiele grup sprawdzania poprawności na tej samej stronie. – rahularyansharma

+0

http://stackoverflow.com/a/11548526/779158 znaleźć odpowiedź problem tutaj również dla grupy walidacji. – rahularyansharma

3

Spójrz na client side api for ASP.Net validators. Wszystkie walidatory na stronie są wyświetlane w postaci Array przez Page_Validators. Możesz zadzwonić pod numer ValidatorValidate(validator) na jednym walidatorze, aby go wywołać. Tak więc, aby wywołać wszystkie weryfikatorów na stronie można było:

Page_Validators.forEach(ValidatorValidate); 

Nawiasem mówiąc, aby korzystać Array.forEachyou'll need to extend Array w starszych przeglądarkach.

7

Page_ClientValidate wyzwala walidacji dla wszystkich weryfikatorów w formie i jak @ gilly3 pokazuje się można Jeśli jednak chcesz sprawdzić tylko jeden konkretny weryfikator, musisz zadzwonić pod numer ValidatorValidate(validator) tylko dla jednego elementu.

Argument walidatora musi być obiektem DOM, który może być trudny do uzyskania, ponieważ identyfikator elementu może się zupełnie różnić od podanego w znaczniku, jeśli używane są strony wzorcowe lub kontrolki użytkownika.

np.

<asp:RequiredFieldValidator ID="rfvCampaignStartDate" runat="server" .../> 

staje

<span id="cph_0_rfvCampaignFile" ...> 

mam sobie z tym w jednym z moich projektów za pomocą selektora jQuery jak ten

ValidatorValidate($('[id$="rfvCampaignFile"]').get(0)); 

ASP.NET tylko prefiksów identyfikatorów, aby stworzyć unikalną nazwę Mogę użyć części selektora, aby dopasować dowolne identyfikatory kończące się "rfvCampaignFile" odkąd napisałem stronę internetową, o której wiem, że nie będzie kolidować z innymi kontrolkami. Wreszcie używam .get(0), aby przywrócić odwołanie do obiektu DOM do pierwszego (i tylko w moim przypadku) obiektu DOM dopasowanego.

1

Jeśli używasz jQuery następnie ustawić ClientIDMode sterowania ASP.NET = "Static" i można dokonać kod łatwiejsze do odczytania ...

ValidatorValidate ($ ('# MyControl'));

lub coś bardzo podobnego.

Powiązane problemy