2017-07-21 5 views
0

Derzeit mit UserControls arbeiten.Wie überprüft man, ob die Validierungsgruppe bestanden wurde?

Haben diese Schaltfläche:

<dx:ASPxButton ID="btnSave" runat="server" Text="Save" CssClass="btn btn-active" ValidationGroup="MyValidationGroup" OnClick="BtnSaveClick"> 

ich diesen Code von meinem Teamkollegen geerbt.

Kürzlich entdeckte ich, dass wenn die Taste mehrmals geklickt wird, es den Datensatz dupliziert.

Ich versuchte

btnSave.ClientEnabled = false; 

und

btnSave.Enabled = false; 

in den Code hinter hinzuzufügen, aber es verhindert nicht aus den Aufzeichnungen zu duplizieren.

Wie überprüfen, ob Validierungsgruppe (erfolgreich) in jquery oder Javascript bestanden, als die Schaltfläche am Frontend deaktivieren?

Jede Idee?

+0

Wenn Sie keine Duplikate wünschen, prüfen Sie sie auf Datenbankebene. Das Deaktivieren einer Schaltfläche hilft beim Doppelklicken. Aber Sie erhalten immer noch das gleiche Ergebnis, wenn ein Benutzer 'F5' drückt oder die Seite neu lädt und dann die Taste erneut drückt. – VDWWD

+0

Ja. Dieses Ding sollte so sein. Fügen Sie Ihren Kommentar als Antwort hinzu, damit ich ihn akzeptieren kann. –

Antwort

1

gut einfach

<asp:Button ID="btnSave" runat="server" class="btn btn-active" OnClick="btnSave_Click" ValidationGroup="validation" Text="Save" OnClientClick="if (!Page_ClientValidate()){ return false; } this.disabled = true; this.value = 'Saving...';" 
             UseSubmitBehavior="false" /> 

Dieser Code verwenden platzieren Snippet wird Ihre Schaltfläche deaktivieren und erlaubt es nicht, mehrmals zu klicken, bis das click -Ereignis seine c ausführt ode Hoffe, das wird helfen :)

1

Sie können diese $ tun (document) .ready (function() {

$('#ctl00_MainContent_btnSave') 
    .attr("onclick", null) 
    .removeAttr("onclick") 
    .click(function() {   
    // To validate you form using Validation group. 
    if (typeof (Page_ClientValidate) == 'function') { 
       Page_ClientValidate("ValidationGroup"); 
       if (Page_IsValid == true) { 
        alert('the form is valid'); 
       } 
      } else { 
       if ($(this).valid()) { 
        alert('the form is valid'); 
       } 
      }    

     //Disable button before page posting back 
     WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions($(this).attr("name"), "", true, "", "", false, false)); 
    }); 

});

+0

Ja, aber was passiert, wenn das Formular ungültig ist? –

+0

Tatsächlich habe ich eine Methode in Code gefunden, um zu überprüfen, ob die Form gültig ist.Ist es möglich, einen Ajax-Aufruf oder etwas zu machen, um zu überprüfen, ob das Formular gültig ist? –

+0

Ja, Sie können eine JavaScript-Funktion mit Page.ClientScript.RegisterStartupScript aufrufen (this.GetType(), "CallMyFunction", "MyFunction()", true); um die Schaltfläche zu deaktivieren. – Ravikumar

1

Wenn Sie keine Duplikate wünschen, prüfen Sie sie auf Datenbankebene. Das Deaktivieren einer Schaltfläche hilft beim Doppelklicken. Aber Sie erhalten immer noch das gleiche Ergebnis, wenn ein Benutzer F5 drückt oder die Seite neu lädt und dann die Taste erneut drückt.

Für MS SQL könnten Sie so etwas tun:

IF NOT EXISTS (SELECT column FROM table WHERE (column = @myVar)) 
    INSERT INTO table (column) VALUES (@myVar) 

Oder man könnte auch eine Einschränkung für die Spalte

ALTER TABLE table ADD CONSTRAINT UQ_column UNIQUE (column) 
0

Ich fand es heraus. Als ich den Code @Shayan Hafeez verwendet habe, hat der Compiler eine Ausnahme ausgelöst.

The server tag is not well formed. 

als, i entfernt OnClientClick vom Button und fügen Sie diesen Code in Code-Behind:

btnSave.ClientSideEvents.Click = "if (!Page_ClientValidate()){ return false; } this.disabled = true; this.value = 'Saving...';"; 

Es funktioniert jetzt.

+0

Nun ich weiß nicht, weil der Code, der Ihnen gegeben hat, richtig funktioniert für mich Ich denke, Sie haben etwas "oder etwas vermisst, aber froh zu wissen, dass Sie das solutoin gefunden haben und es Ihnen hilft :) –

+0

Ihre Antwort hat mir geholfen. So habe ich markiert es :) –

Verwandte Themen