2009-05-13 17 views
2

Ich fragte mich, ob jemand wusste, wie eine Client-seitige Validierung mit jquery und dann das Postback-Ereignis manuell für ein asp.net-Steuerelement ausführen können.Validierung vor Postback-Ereignis auf Masterpage Asp.net

Hier ist ein Beispiel Master-Seite dh

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#<%=lnkbtnSave.ClientID %>").click(function() { 
     alert("hello"); 
     // Do some validation 
     // If validation Passes then post back to lnkbtnSave_Click Server side Event 
     }); 
}); 
</script> 
<asp:LinkButton ID="lnkbtnSave" runat="server" onclick="lnkbtnSave_Click" ><asp:Image ID="Image3" runat="server" ImageUrl="~/images/save.gif" AlternateText="Save" />Save</asp:LinkButton> 

Master-Seite-Code Hinter

public delegate void MasterPageMenuClickHandler(object sender, System.EventArgs e); 
    public event MasterPageMenuClickHandler MenuButton; 

    protected void lnkbtnSave_Click(object sender, EventArgs e) 
    { 
     // Assign value to public property 
     _currentButton = "Save"; 

     // Fire event to existing delegates 
     OnMenuButton(e); 
    } 

    protected virtual void OnMenuButton(EventArgs e) 
    { 
     if (MenuButton != null) 
     { 
      //Invokes the delegates. 
      MenuButton(this, e); 
     } 
    } 

Inhalt Seite-Code hinter

protected void Page_Load(object sender, EventArgs e) 
{ 
     Master.MenuButton += new Form.MasterPageMenuClickHandler(Master_MenuButton); 
} 

void Master_MenuButton(object sender, EventArgs e) 
    { 
     switch (Master.CurrentButton) 
     { 
      case "Save": 
       Save(); 
       break; 
      case "New": 
       Response.Redirect("ContentPage.aspx"); 
       break; 
      default: 
       break; 
     } 
    } 

Auch die Steuer lnkbtnSave in einer Masterseite ist so Wie würde ich feststellen, welche Inhaltsseite ich seit jedem Inhalt pa bin ge hat eigene Kontrollen zu validieren.

Vielen Dank für jede Hilfe

Antwort

2

Für die erste Frage sollten Sie in der Lage sein, nur wahr zurückzugeben, um die Linkbuttons zum Postback zu bringen, und false zurückzugeben, um es zu stoppen.

$(document).ready(function() {  
    $("#<%=lnkbtnSave.ClientID %>").click(function() {   
     alert("hello");   
     var isValid = false; 
     // Do some validation 
     return isValid; 
    }); 
}); 

Für Ihre zweite Frage, könnten Sie jede Seite ihre eigene Version des Validierungsskript hinzufügen und haben die Funktion, in der Masterpage es verwenden Gültigkeit zu bestimmen:

Master-Seite:

$(document).ready(function() {  
    $("#<%=lnkbtnSave.ClientID %>").click(function() {     
     return pageIsValid(); 
    }); 
});  

Inhalt Seite:

function pageIsValid() { 
     var isValid = false; 
     //validation logic 
     return isValid; 
    } 
+0

Danke Jimmie! Ich wusste nie, dass du das kannst. – zSynopsis

4

Wenn man es in umgekehrter aussehen könnte vereinfacht werden. Anstatt die Validierung durchzuführen und dann das Postback zu initiieren, können Sie das Postback bei Bedarf validieren und verhindern.

$('#<%= lnkbtnSave.ClientID %>').click(function(e) { 
    if (!validate()) { 
     e.preventDefault(); //will stop the page from posting back. 
    } 
}); 

Wenn Sie wirklich das Postback initiieren müssen (und tun es in die andere Richtung) konnte man die __doPostBack() Funktion explizit aufrufen, die ASP.NET für Sie auf der Seite setzt nach der Validierung zu tun.

// This does the exact same thing as above, but it explicitly calls __doPostBack 
// If you use the above code __doPostBack will be called automatically for you. 
$('#<%= lnkbtnSave.ClientID %>').click(function(e) { 
    if (validate()) { 
     __doPostBack('<%= lnkbtnSave.ClientID %>',''); 
    } 
    e.preventDefault(); 
}); 

Lassen Sie mich wissen, wenn etwas davon Klärung benötigt.

+0

Danke, ich werde es versuchen! – zSynopsis

Verwandte Themen