2017-04-03 2 views
0

J'ai une méthode de formulaire Web .net pour appeler la méthode JavaScript (à partir d'un contrôle utilisateur) en un seul appel, mais seul le premier appel est déclenché. Les codes de back-end sont:L'appel de méthode JavaScript ne peut être appelé qu'une seule fois à l'aide de ScriptManager

bool isAddOnsExisting = priceSummaryList.Any(x => x.ItemName == "AAA"); 
UcSummary.setPanelVisibility(isAddOnsExisting, "AAAPanel"); 

bool isControlExisting = priceSummaryList.Any(x => x.ItemName == "BBB"); 
UcSummary.setPanelVisibility(isControlExisting, "BBBPanel"); 

La méthode de back-end 'UcSummary' est:

 public void setPanelVisibility(bool isExisting, string itemTitle) 
      {if (isExisting) 
      {ScriptManager.RegisterStartupScript(Page, GetType(), 
      "setVisibility","updatePanelVisibility('1','" + itemTitle + "');", true);} 
      else 
      {ScriptManager.RegisterStartupScript(Page, GetType(), 
      "setVisibility","updatePanelVisibility('0', '" + itemTitle + "');", true);}} 

La méthode JavaScript est:

function updatePanelVisibility(isExisting, itemPanel) 
{ 
    var theItemPanel = "#" + itemPanel; 

    if (isExisting == '1') { 
     $(theItemPanel).fadeIn(); 
    } 
    else { 
     $(theItemPanel).hide(); 
    } 
} 

Je trouve que la première méthode pour 'AAA' sera déclenché mais 'BBB' est ignoré. Quelqu'un pourrait-il conseiller la raison? Merci!

Répondre

1

Je crois que le problème est que vous avez utilisé la même classe et le même nom pour les deux scripts de démarrage, ce qui provoque l'écrasement de l'autre.

Un peu plus d'informations à partir de: https://msdn.microsoft.com/en-us/library/bb359558(v=vs.110).aspx

public static void RegisterStartupScript(
Control control, 
Type type, 
string key, 
string script, 
bool addScriptTags) 

...

clé - System.String - Un identificateur unique pour le bloc de script.

+0

J'ai changé la méthode d'appel à: si (isExisting) { ScriptManager.RegisterClientScriptBlock (Page, GetType(), "setControlVisibility2", "updateControlPanelVisibility ('1', '" + ItemTitle + "'); ", vrai); } { autre ScriptManager.RegisterClientScriptBlock (Page, GetType(), "setControlVisibility3", "updateControlPanelVisibility ('0', '" + ItemTitle + "');", true); } Il fonctionne toujours seulement une fois pour AAA. – DennisL

+1

J'ajoute la clé comme "Script" + Guid.NewGuid(), alors ça marche! Merci! – DennisL