Pregunta

Estoy dentro de ...

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

y después de " algún código " Quiero disparar

[WebMethod]
public static void DoSome()
{

}

Lo que activa algunos javascript. ¿Es esto posible?

Ok, cambia los métodos aquí. Pude llamar a dosome (); que disparó pero no activó el javascript. He intentado usar el método registerstartupscript pero no entiendo completamente cómo implementarlo. Esto es lo que intenté:

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

}

Obtuve el código registerstartupscript de un ejemplo de msdn. Claramente no lo estoy implementando correctamente. Actualmente vs dice " Se requiere una referencia de objeto para el campo, método o propiedad no estática 'System.Web.UI.Page.ClientScript.get' que se refiere al fragmento de código " Page.Clientscript; " Gracias.

¿Fue útil?

Solución

No estoy seguro de entender completamente la secuencia de lo que está tratando de hacer, lo que está del lado del cliente y lo que no ...

Sin embargo, puede agregar un método de inicio de javascript a la página que luego llamará WebMethod. Al llamar a WebMethod a través de javascript, puede agregar una función de devolución de llamada, que luego se llamará cuando el WebMethod regrese.

Si agrega una etiqueta de ScriptManager en su página, puede llamar a WebMethods definidos en la página a través de Javascript.

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

Desde la función Page_Load puede agregar una llamada a su método web.

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

Callback_Function representa una función javascript que se ejecutará después de que se llame a WebMethod ...

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

EDIT:

Encontré este enlace para Controles ADF web . ¿Es esto lo que estás usando?

Desde esa página, parece que algo como esto hará una devolución de llamada 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);
}

Otros consejos

Si lo anterior es cómo llama RegisterStartupScript, no funcionará porque no tiene una referencia a la " Página " objeto.

bgchange en su ejemplo extiende Object (asumiendo que IMapServerDropDownBoxAction es una interfaz), lo que significa que no hay una instancia de página a la que pueda hacer referencia.

Esto hizo exactamente lo mismo desde una página Asp.Net o UserControl, funcionaría, porque la página sería una referencia válida.

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

No puede llamar a métodos dentro de un navegador directamente desde el servidor. Sin embargo, puede agregar funciones javascript a la respuesta que ejecutará los métodos dentro del navegador.

Dentro del método ServerAction, haga lo siguiente

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

Page.RegisterStartupScript("ForceClientToCallServerMethod", script);

Más información aquí

hmmm ... la pregunta cambió dramáticamente desde mi respuesta original.

Ahora creo que la respuesta es no. Pero podría estar equivocado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top