Domanda

Sono dentro ...

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

e dopo " del codice " Voglio innescare

[WebMethod]
public static void DoSome()
{

}

Che attiva alcuni javascript. È possibile?

Ok, cambia metodo qui. Sono stato in grado di chiamare dosome (); che ha generato ma non ha attivato il javascript. Ho provato ad usare il metodo registerstartupscript ma non capisco bene come implementarlo. Ecco cosa ho provato:

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);
        }
}

}

Ho ottenuto il codice registerstartupscript da un esempio msdn. Chiaramente non lo sto implementando correttamente. Attualmente vs dice " È necessario un riferimento a un oggetto per il campo, il metodo o la proprietà non statici "System.Web.UI.Page.ClientScript.get" in riferimento al pezzo di codice "Page.Clientscript; " Grazie.

È stato utile?

Soluzione

Non sono sicuro di aver compreso appieno la sequenza di ciò che stai cercando di fare, cosa è il lato client e cosa no ....

Tuttavia, è possibile aggiungere un metodo javascript di avvio alla pagina che quindi chiamerebbe WebMethod. Quando si chiama un WebMethod tramite javascript, è possibile aggiungere una funzione di richiamata, che verrà quindi chiamata al ritorno di WebMethod.

Se aggiungi un tag ScriptManager alla tua pagina, puoi chiamare WebMethods definiti nella pagina tramite Javascript.

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

Dalla funzione Page_Load puoi aggiungere una chiamata al tuo WebMethod ..

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

Callback_Function rappresenta una funzione javascript che verrà eseguita dopo che il WebMethod è chiamato ...

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

EDIT:

Trovato questo link per Controlli ADF Web . È questo che stai usando ??

Da quella pagina, sembra che qualcosa del genere farà un callback 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);
}

Altri suggerimenti

Se quanto sopra è come stai chiamando RegisterStartupScript, non funzionerà perché non hai un riferimento alla " Pagina " oggetto.

bgchange nel tuo esempio estende Object (supponendo che IMapServerDropDownBoxAction sia un'interfaccia), il che significa che non esiste un'istanza Page a cui puoi fare riferimento.

Questo hai fatto esattamente la stessa cosa da una pagina Asp.Net o UserControl, avrebbe funzionato, perché Page sarebbe un riferimento valido.

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);          
    }
}

Non è possibile chiamare metodi all'interno di un browser direttamente dal server. Tuttavia, puoi aggiungere funzioni javascript alla risposta che eseguirà i metodi all'interno del browser.

All'interno del metodo ServerAction, eseguire le seguenti operazioni

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

Page.RegisterStartupScript("ForceClientToCallServerMethod", script);

Maggiori informazioni qui

hmmm ... la domanda è cambiata radicalmente dalla mia risposta originale.

Ora penso che la risposta sia no. Ma potrei sbagliarmi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top