ASP.NET c # Correction de l’événement OK d’une boîte de confirmation personnalisée dans une bibliothèque de fonctions

Nous avons créé une fonction qui montre un modalpopupmessage de c # à javascript de façon dynamic, mais nous voulions append un paramètre afin de pouvoir transmettre un délégué de fonction (ou un gestionnaire d’événements) qui serait appelé si l’utilisateur appuyait sur le bouton OK. Aucune suggestion?

Postdata: Nous ne voulons pas de la solution classique “confirmez que vous voulez appuyer sur ce bouton” mais d’une fonction permettant de demander une confirmation dans n’importe quelle partie du processus, si nécessaire. Exemple: l’utilisateur clique sur le bouton de suppression d’élément, dans le code ci-dessous, vérifiez que l’élément a une dépendance, affichez un message de confirmation avec la fonction mensaje transmettant le délégué deleteitemconfirmed (), si l’utilisateur clique sur OK, appelez le délégué …

Fonction dans la bibliothèque:

public static void Mensaje(ssortingng mensaje, EventHandler EventoClickLLamar, bool botoncancelar, ssortingng cssclass, Color colorfondo) { ssortingng colorfondox = ColorTranslator.ToHtml(colorfondo); ssortingng idbotonok = EventoClickLLamar == null ? "" : EventoClickLLamar.Method.Name.Replace("_Click", ""); ssortingng script = " function verifyStyle(selector) {" + " \r\n" + " var rules;" + " \r\n" + " var haveRule = false;" + " \r\n" + " " + " \r\n" + " if (typeof document.styleSheets != \"undefined\") { //is this supported" + " \r\n" + " var cssSheets = document.styleSheets;" + " \r\n" + " " + " \r\n" + " outerloop:" + " \r\n" + " for (var i = 0; i < cssSheets.length; i++) {" + " \r\n" + " " + " \r\n" + " //using IE or FireFox/Standards Compliant" + " \r\n" + " rules = (typeof cssSheets[i].cssRules != \"undefined\") ? cssSheets[i].cssRules : cssSheets[i].rules;" + " \r\n" + " " + " \r\n" + " for (var j = 0; j  e ? b - s > e ? b - s : e : b < e ? b + s < e ? b + s : e : b;" + " \r\n" + " }" + " \r\n" + " // we may consider adding frames support" + " \r\n" + " var w = window;" + " \r\n" + " // shortcut to document" + " \r\n" + " var d = w.document;" + " \r\n" + " // canvas, window width and window height" + " \r\n" + " var r = d.documentElement;" + " \r\n" + " var ww = w.innerWidth ? w.innerWidth + w.pageXOffset : r.clientWidth + r.scrollLeft;" + " \r\n" + " var wh = w.innerHeight ? w.innerHeight + w.pageYOffset : r.clientHeight + r.scrollTop;" + " \r\n" + " // create a block element" + " \r\n" + " var b = d.createElement('div');" + " \r\n" + " b.id = 'Message';" + " \r\n" + " b.className = '" + cssclass + "' || '';" + " \r\n" + " b.style.cssText = 'top:-9999px;left:-9999px;position:absolute;white-space:nowrap;z-index: 1001;';" + " \r\n" + " // classname not passed, set defaults" + " \r\n" + " if (!verifyStyle(\"." + cssclass + "\")) {" + " \r\n" + " b.style.margin = '0px 0px';" + " \r\n" + " b.style.padding = '8px 8px';" + " \r\n" + " b.style.border = '1px solid #A4BED0';" + " \r\n" + " b.style.backgroundColor = '#E0ECF1';" + " \r\n" + " }" + " \r\n" + " var bx = d.createElement('div');" + " \r\n" + " bx.style.cssText = 'position: absolute;left:0px;top:0px;width:100%;height:100%;text-align:center;z-index: 1000;background-color: " + //va seguido sin salto colorfondox + ";opacity:0.5;filter:alpha(opacity=50);'" + " \r\n" + " d.body.insertBefore(bx, d.body.firstChild);" + " \r\n" + " d.body.insertBefore(b, d.body.firstChild); " + " \r\n" + " // write HTML fragment to it " + " \r\n" + " b.innerHTML = '
" + mensaje + "
" + (ssortingng.IsNullOrEmpty(idbotonok) ? "" : "") + (botoncancelar ? "" : "") + "
';" + " \r\n" + " // save width/height before hiding " + " \r\n" + " var bw = b.offsetWidth;" + " \r\n" + " var bh = b.offsetHeight;" + " \r\n" + " // hide, move and then show" + " \r\n" + " b.style.display = 'none';" + " \r\n" + " b.style.top = (wh / 2 - bh / 2) + 'px'; //center" + " \r\n" + " b.style.left = (ww / 2 - bw / 2) + 'px'; //center" + " \r\n" + " b.style.display = 'block';" + " \r\n"; ScriptManager.RegisterClientScriptBlock((Page)HttpContext.Current.Handler, typeof(Page), "mensaje", script, true); }

Page de test:

 public partial class Test: Page { protected void Page_Load(object sender, EventArgs e) { } btnDeleteItem_Click(object sender, EventArgs e) { //DB checks .... .... //After x checks against Database we see the item has some dependency so we ask for confirmation FunctionsLibrary.Mensaje("This Item has x dependency, are you sure you want to delete it?", btnDeleteItemConfirmed_Click, true, "cssclassx", System.Drawing.Color.Gray); } btnDeleteItemConfirmed_Click(object sender, EventArgs e) { //delete item definitively, handle dependencies etc... } } 

Options que nous ne pouvions pas faire fonctionner (au cas où nous serions sur la bonne voie mais que quelque chose n’allait pas):

  • Cas 1: (Celui implémenté dans notre exemple de code) Utilisant EventHandler + __doPostBack, si vous avez défini le paramètre buttonid_click dans votre page, il sera appelé à la publication. (L’événement n’a pas eu lieu … nous supposons que c’est parce que nous n’avons pas rajouté le contrôle Ok dans le chargement de la page … ce qui nous donne le cas 2)

  • Cas 2: Enregistrez la fonction déléguée transmise, enregistrez l’événement Page.Load + = GetPostBackControlID (), dans la page suivante, chargez GetPostBackControlID (), nous vérifions si l’ID de contrôle sur lequel vous cliquez est notre bouton OK. Dans ce cas, appelez la fonction de délégué

Donc, vous voulez parler au code derrière la boîte de dialog Javascript? La meilleure solution consiste à utiliser Ajax. Découvrez comment cela se fait ici: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Rappelez-vous que vous appelez une méthode statique dans votre codebehind afin que toutes les données de la page ne soient pas disponibles. Vous pouvez cependant, par exemple, accéder à l’object Session via l’object HttpCurrent.

Bonne chance.

Après avoir vérifié la dépendance, définissez btnDeleteItem.OnClick comme btnDeleteItem.OnClick +=btnDeleteItemConfirmed_Click . cliquez sur OnClientClick="return confirm('Are you sure you want to delete this item?');"

Que cela vous aide