2009-08-05 12 views
9

Tengo un sistema de administración de contenido simple que almacena páginas por Nombre de página y Versión. Después de hacer clic en Guardar, mi código (lado del servidor) comprueba la existencia de Pagename/Version.Diálogo de confirmación en tiempo de ejecución en asp.net

Si existe, me gustaría mostrar un cuadro de diálogo de confirmación, que solicita al usuario que confirme si el Nombre/Versión actual debe reemplazarse o no.

¿Cuál es la forma más fácil de lograr esto? Gracias.

Respuesta

7

Agradezco las respuestas anteriores y fueron útiles, pero no es exactamente lo que estaba buscando. Después de considerar las respuestas y hacer más investigación, estoy publicando mi solución para que tal vez ayude a otra persona.

código del botón:

<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# usando subsónico 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" /> 

Si hacen clic en OK, el evento onclick servidor va a pasar, si hacen clic en cancelar, que será como ni siquiera pulse el botón, por supuesto, siempre se puede añadir a la funcionabilidad de cancelación de parte.

Tal vez algo como:

<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

Creo que él quiere comparar lado del servidor y no en javascript. –

0

Ponga el cheque antes de renderizar la página al cliente. A continuación, adjunte un controlador (en el lado del cliente, por ejemplo, javascript) al botón Guardar o formulario que muestra el cuadro de confirmación (pero solo si el resultado de la restauración es un reemplazo).

+0

El usuario ingresa el nombre de la página/nombre de la versión en un cuadro de texto, por lo que no estoy seguro de cómo lo verificaría antes de procesarlo. Supongo que podría usar un método de página en el javascript para el cheque, pero ¿es esta la mejor manera? –

+0

Si solo está comprobando dos cadenas, puede hacerlo en javascript, hacer un método CompareConfirm() en JS y llamarlo en el evento asp: Button OnClientClick, comparar las dos cadenas y hacer que el método devuelva Confirm(). Voy a elaborar un poco más en mi respuesta a continuación. – Carlo

1

Un enfoque alternativo y más simple que no requiere AJAX sería permitir el post-back como es normal, luego en el código subyacente, haz tus verificaciones.

Si se requiere la confirmación del usuario, simplemente devuelva al usuario a la misma página pero visualice un panel adicional y oculte el botón original 'Guardar'.

En este panel adicional, muestre su mensaje con otro botón Aceptar/Cancelar. Cuando el usuario haga clic en este botón Aceptar, ¡realice la operación de guardar!

0

añadir un campo oculto a la página, por ejemplo, Hiddenfield1

continuación, añadir esta función

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

Probé esta técnica en IE9 y FF26 y no veo ningún diálogo de confirmación. Sin errores, simplemente no hay diálogo de confirmación. ¿Cuál es la causa más común para ese tipo de problema? – Tevya

Cuestiones relacionadas