2010-11-19 6 views
1
  • J'ai une vue quadrillée.
  • Le Gridview est dans un panneau de mise à jour.
  • J'ai ajouté une liste déroulante dans une colonne modèle de la vue quadrillée.
  • L'autopostback est défini sur true.
  • J'ai le code de travail en cas SelectedIndexChanged

tout cela fonctionne très bienListe déroulante dans gridview dans le panneau de mise à jour pour déclencher la case de confirmation côté client

maintenant je veux ajouter une invite de confirmation javascript sur le changement côté client des listes déroulantes je l'ai popping la confirmer boîte, mais peu importe ce que l'utilisateur sélectionne (ok ou annuler), il ne publie pas de retour

<asp:DropDownList ID="ddlWinnerStatus" runat="server" CssClass="winStatusDDL" OnChange="return ShowWarning(this);"AutoPostBack="true" OnSelectedIndexChanged="ddlWinnerStatus_OnSelectedIndexChanged"></asp:DropDownList> 
+0

Pouvez-vous publier la fonction ShowWarning()? –

+0

... et le balisage du UpdatePanel. Avez-vous ChildrenAsTriggers = "true"? –

+0

... et le code d'événement OnSelectedIndexChanged? – jwiscarson

Répondre

1

d'abord, la classe DropDownList ne pas exposer une propriété OnChange , Donc je suppose que vous faites quelque chose comme:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    ddlWinnerStatus.Attributes.Add("onchange", "return ShowWarning(this);"); 
} 

Maintenant, le problème est que, sous le capot, la liste déroulante concatène l'appel postback à votre attribut onchange existant, ce qui donne quelque chose comme:

<select onchange="return ShowWarning(this); __doPostBack(...);"> 

qui est en fait plus complexe, parce que AutoPostBack est true donc un appel supplémentaire à window.setTimeout() est inséré, mais c'est l'essentiel de celui-ci, et vous pouvez voir que __doPostBack() ne sera jamais appelé puisque vous êtes toujours retour tôt au gestionnaire.

Pour obtenir ce que vous voulez, vous devrez faire tout le travail vous-même, en utilisant GetPostBackEventReference() pour générer l'appel approprié à __doPostBack():

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    ddlWinnerStatus.Attributes.Add("onchange", 
     String.Format(CultureInfo.InvariantCulture, 
      "if (ShowWarning(this)) {{ {0}; return true; }} else return false;", 
      ClientScript.GetPostBackEventReference(ddlWinnerStatus, ""))); 
} 

Notez que si vous faites cela, la propriété AutoPostBack devient redondante (et est effectivement ignoré).

Questions connexes