2010-10-22 4 views
2

J'essaie d'appeler une fonction JavaScript de mon code de contrôle ascx dans le bloc catch. J'ai essayé les deux façons ci-dessous, mais elles ne semblent pas fonctionner.Appel de la fonction JavaScript à partir du code beind (C#) catch block

  1. Page.ClientScript.RegisterClientScriptBlock(typeof(string), "script", "test();", true);

  2. ScriptManager.RegisterStartupScript(Page, GetType(), "err_msg", "alert('error');", true);

La fonction est appelée si je place le code sous "PageLoad" mais ne pas appelée lorsqu'il est placé dans block.Should catch je fais tout différent d'appeler une fonction JavaScript du bloc catch. Veuillez suggérer.

Merci

+0

poser une question idiote> vous savez que le bloc catch est exécutée uniquement lorsqu'une exception est levée? –

+0

C'est exactement ce que j'essaie d'atteindre. Lorsqu'il y a une exception, je veux appeler une fonction javascript. – San

Répondre

1

pourraient vouloir essayer: .cs

public String ScriptToRun = "test();"; 

.aspx

$(document).ready(function() {<%=ScriptToRun %>}); //or you can register event to document mannually 

Rappelez-vous que tout ce que vous fait en arrière-plan va générer le code HTML, javascript Css & au navigateur.

mise à jour: J'ai essayé le code suivant, cela fonctionne dans mon cas. pourriez-vous s'il vous plaît fournir plus de détails? .cs

public String script = ""; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    throwExcep(); 
} 

private void throwExcep() 
{ 
    try 
    { 
     throw new NotImplementedException(); 
    } 
    catch (Exception e) 
    { 
     script = "console.log('exception throws from backend message: ["+e.Message+"]')"; 
    } 
} 

.aspx:

<script> 
    $(document).ready(function(){ 
     <%=script %> 
    }); 
    </script> 
+0

Cela ne fonctionne pas lorsque j'attribue un bloc Catch. – San

+0

@San j'ai essayé ce qui suit, cela fonctionne dans mon cas. – jebberwocky

+0

Mon scénario est - J'ai un bouton sur la page maître qui ouvre une page aspx dans une fenêtre contextuelle.Lorsque je clique sur le bouton «enregistrer» sur l'écran popup l'écran popup est fermé après l'action de sauvegarde est effectuée. En cas d'erreur je devrai montrer le message d'erreur sur un champ qui est dans la page maître. Essayez catch block est dans la page pop-up. – San

0

Quel est le bloc catch et où est-il?

Si un code dans un bloc catch est exécuté, cela signifie généralement que quelque chose a échoué, peut-être que cet échec est également la raison pour laquelle l'appel JS ne passe pas.

+0

En cas d'accès refusé l'exception, je dois afficher un message en haut d'une page avec des styles css appliqués . Donc, j'essaie d'appeler une fonction javascript qui fait cela. – San

+0

Est-ce appelé par le biais de la publication, ajax ou en chargeant la page depuis le début? Le script s'exécute-t-il au bon moment (après le rendu de la page) ou essaie-t-il de s'exécuter sur une page inachevée? –

+0

Il est appelé en publication. Au chargement de la page, si j'appelle la fonction, cela fonctionne.Even - Page.ClientScript.RegisterStartupScript (typeof (chaîne), "script", "Javascript: alert ('test');", true); ne lance pas d'alerte dans le bloc catch – San

2

Avez-vous essayé?

Page.ClientScript.RegisterStartupScript(typeof(string), "script", "test();", true); 

Je ne peux pas me rappeler du haut de ma tête si cela est équivalent à l'option ScriptManager dans la question.

Vous devez également vous assurer que la valeur "clé de script" que vous transmettez est unique, sinon asp.net rejettera toutes les données sauf la première instance du script enregistré avec la même clé.

1

Javascript n'aime pas du tout les caractères spéciaux et les caractères NewLine (\ r \ n). Remplacez tout cela et ça marchera.

Exemple:

string test = msgError.Replace("'", ""); 
test = Server.HtmlEncode(test).Replace(Environment.NewLine, "<br />"); 
Page.ClientScript.RegisterStartupScript(
      typeof(string), 
      "MyKeyCatch", 
      //script, 
      "showErrorMessage('"+test+"');", 
      true); 
Questions connexes