2009-08-05 20 views
9

Ho un semplice sistema di gestione dei contenuti che memorizza le pagine in base a Pagename e Version. Dopo aver fatto clic su Salva, il mio codice (lato server) verifica l'esistenza di Pagename/Version.Finestra di dialogo di conferma in runtime in asp.net

Se esiste, desidero visualizzare una finestra di dialogo di conferma, che richiede all'utente di confermare se il nome di pagina/versione corrente debba essere sostituito o meno.

Qual è il modo più semplice per farlo? Grazie.

risposta

7

Apprezzo entrambe le risposte precedenti ed erano utili ma non esattamente quello che stavo cercando. Dopo aver considerato le risposte e fatto più ricerche, sto postando la mia soluzione in modo che forse possa aiutare qualcun altro.

codice Button:

<asp:Button ID="btnSave" OnClick="btnSaveClick" runat="server" Text="Save" OnClientClick="return CheckForVersion()" /> 

Javascript:

<script language="javascript"> 
    function CheckForVersion() { 
     PageMethods.CheckForVersion(aspnetForm.ctl00$ContentPlaceHolder1$ddlPageName2.value, aspnetForm.ctl00$ContentPlaceHolder1$txtContentName2.value, OnSucceeded, OnFailed); 
     return false; 
    } 

    function OnSucceeded(results) { 
     if(results) { 
      //version exists so prompt user 
      if(confirm("Version already exists. Do you want to overwrite?")) { 
       __doPostBack('ctl00$ContentPlaceHolder1$btnSave',''); 
      } 
     } 
     else 
     { 
      //version does not exist so save it without prompting user 
      __doPostBack('ctl00$ContentPlaceHolder1$btnSave',''); 
     } 

    } 

    function OnFailed(error) { 
     // handle pagemethod error 
     alert(error.get_message()); 
    } 

</script> 

C# utilizzando Subsonic 2.1:

[WebMethod] 
    public static bool CheckForVersion(string pageName, string versionName) 
    { 
     PageContentCollection pages = new PageContentCollection().Where("pageName", pageName).Where("versionName", versionName).Load(); 
     if (pages.Count > 0) 
      return true; 
     else 
      return false;    
    } 
13
<asp:Button OnClientClick="return confirm('Are you sure you want to go?');" 
      Text="Confirm" runat="server" onclick="Unnamed1_Click" /> 

Se si fa clic su OK, l'evento onclick del server accadrà, se si fa clic su Annulla, sarà come non hanno nemmeno premere il pulsante, naturalmente, è sempre possibile aggiungere functionallity alla parte annullare.

Forse qualcosa di simile:

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     function CompareConfirm() 
     { 
      var str1 = "abc"; 
      var str2 = "def"; 

      if (str1 === str2) { 
       // your logic here 
       return false; 
      } else { 
       // your logic here 
       return confirm("Confirm?"); 
      } 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button OnClientClick="return CompareConfirm();" 
      Text="Confirm" runat="server" onclick="Unnamed1_Click" /> 
    </div> 
    </form> 
</body> 
</html> 
+0

Penso che lui vuole confrontare sul lato server piuttosto in javascript. –

0

Mettere il controllo prima del rendering della pagina al client. Quindi allegare un gestore (sul lato client, ad esempio javascript) al pulsante di salvataggio o modulo che visualizza la casella di conferma (ma solo se il salvataggio risulta in una sostituzione).

+0

L'utente inserisce il nome della pagina/nome della versione in una casella di testo, quindi non sono sicuro di come verificherei prima del rendering. Suppongo che potrei usare un pagemethod in javascript per il controllo ma è questo il modo migliore? –

+0

Se stai solo controllando due stringhe, puoi farlo in javascript, fare un metodo CompareConfirm() in JS e chiamarlo su asp: Button OnClientClick, confrontare le due stringhe e avere il metodo restituire Confirm(). Elaborerò un po 'di più nella mia risposta qui sotto. – Carlo

1

Un'alternativa, approccio più semplice che non richiede AJAX sarebbe quello di consentire il post-back normalmente, quindi nel code-behind, fai i tuoi controlli.

Se è richiesta la conferma dell'utente, è sufficiente riportare l'utente alla stessa pagina ma rendere visibile un pannello aggiuntivo e nascondere il pulsante "Salva" originale.

In questo pannello aggiuntivo, visualizzare il messaggio con un altro pulsante OK/Annulla. Quando l'utente fa clic su questo pulsante OK, esegui il salvataggio!

0

aggiungere un campo nascosto alla tua pagina, ad esempio Hiddenfield1

quindi aggiungere questa funzione

public bool Confirm(string MSG) 
{ 
    string tmp = ""; 
    tmp = "<script language='javascript'>"; 
    tmp += "document.getElementById('HiddenField1').value=0; if(confirm('" + MSG + "'))   document.getElementById('HiddenField1').value=1;"; 
    tmp += "</script>"; 
    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "ConfirmBox", tmp); 
    if(HiddenField1.Value.Trim()=="0") return false; 
    return true; 
} 
+0

Ho provato questa tecnica su IE9 e FF26 e non vedo alcuna finestra di conferma visualizzata. Nessun errore, solo nessuna finestra di conferma. Qual è la causa più comune di questo tipo di problema? – Tevya

Problemi correlati