Question

Je suis à l'intérieur de ...

public class bgchange : IMapServerDropDownBoxAction
{
    void IServerAction.ServerAction(ToolbarItemInfo info)
    {
     Some code...

et après "un code" Je veux déclencher

[WebMethod]
public static void DoSome()
{

}

Ce qui déclenche du javascript. Est-ce possible?

Ok, changez de méthode ici. J'ai pu appeler dosome (); qui a déclenché mais n'a pas déclenché le javascript. J'ai essayé d'utiliser la méthode registerstartupscript mais je ne comprends pas bien comment l'implémenter. Voici ce que j'ai essayé:

public class bgchange : IMapServerDropDownBoxAction
{

void IServerAction.ServerAction(ToolbarItemInfo info)
{
    ...my C# code to perform on dropdown selection...
        //now I want to trigger some javascript...
        // Define the name and type of the client scripts on the page.
        String csname1 = "PopupScript";
        Type cstype = this.GetType();

        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = Page.ClientScript;

        // Check to see if the startup script is already registered.
        if (!cs.IsStartupScriptRegistered(cstype, csname1))
        {
            String cstext1 = "alert('Hello World');";
            cs.RegisterStartupScript(cstype, csname1, cstext1, true);
        }
}

}

J'ai reçu le code registerstartupscript d'un exemple msdn. Clairement, je ne l’applique pas correctement. Actuellement, vs indique "Une référence d'objet est requise pour le champ, la méthode ou la propriété non statique" System.Web.UI.Page.ClientScript.get "faisant référence au morceau de code" Page.Clientscript; ". Merci.

Était-ce utile?

La solution

Je ne suis pas sûr de bien comprendre la séquence de ce que vous essayez de faire, ce qui est client et ce qui ne l’est pas ....

Cependant, vous pouvez ajouter une méthode javascript de démarrage à la page, qui appelle ensuite WebMethod. Lorsque vous appelez une méthode Web via JavaScript, vous pouvez ajouter une fonction de rappel, qui serait ensuite appelée lorsque la méthode Web sera renvoyée.

Si vous ajoutez une balise ScriptManager sur votre page, vous pouvez appeler les méthodes Web définies dans la page via Javascript.

<asp:ScriptManager ID="scriptManager1" 
    runat="server" EnablePageMethods="true" />

À partir de la fonction Page_Load, vous pouvez ajouter un appel à votre WebMethod ..

Page.ClientScript.RegisterStartupScript(
    this.GetType(), 
    "callDoSome",
    "PageMethods.DoSome(Callback_Function, null)", 
    true);

Callback_Function représente une fonction javascript qui sera exécutée après l'appel de WebMethod ...

<script language="javascript" type="text/javascript">
    function Callback_Function(result, context) {
        alert('WebMethod was called');
    }
</script>

EDIT:

Ce lien a été trouvé pour contrôles Web ADF . . Est-ce ce que vous utilisez?

À partir de cette page, on dirait que quelque chose comme ceci fera un rappel javascript.

public void ServerAction(ToolbarItemInfo info) {
    string jsfunction = "alert('Hello');";
    Map mapctrl = (Map)info.BuddyControls[0];
    CallbackResult cr = new CallbackResult(null, null, "javascript", jsfunction);
    mapctrl.CallbackResults.Add(cr);
}

Autres conseils

Si vous appelez RegisterStartupScript dans ce qui précède, cela ne fonctionnera pas car vous ne disposez pas de référence à la " Page " objet.

bgchange, dans votre exemple, étend Object (en supposant que IMapServerDropDownBoxAction est une interface), ce qui signifie qu'il n'y a pas d'instance de Page à référencer.

Vous avez fait exactement la même chose depuis une page Asp.Net ou un contrôle utilisateur, cela fonctionnerait, car Page serait une référence valide.

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Page.ClientScript.RegisterStartupScript(
            this.GetType(),
            "helloworldpopup",
            "alert('hello world');",
            true);          
    }
}

Vous ne pouvez pas appeler des méthodes dans un navigateur directement depuis le serveur. Vous pouvez cependant ajouter à la réponse des fonctions javascript qui exécuteront des méthodes dans le navigateur.

Dans la méthode ServerAction, procédez comme suit

string script = "<script language='javascript'>\n";
script += "javascriptFunctionHere();\n";
script += "</script>";

Page.RegisterStartupScript("ForceClientToCallServerMethod", script);

Plus d'informations ici

hmmm ... la question a radicalement changé depuis ma réponse initiale.

Maintenant, je pense que la réponse est non. Mais je peux me tromper.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top