Pergunta

Eu estou dentro de ...

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

e depois de "algum código" Quero gatilho

[WebMethod]
public static void DoSome()
{

}

O que desencadeia alguns javascript. Isso é possível?

Ok, mudar métodos aqui. Eu era capaz de chamar dosome (); que disparou, mas não acionar o javascript. Eu tentei usar o método RegisterStartupScript mas não totalmente entender como implementá-lo. Aqui está o que eu tentei:

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

}

Eu tenho o código RegisterStartupScript partir de um exemplo MSDN. É evidente que eu não estou implementá-la corretamente. Atualmente vs diz que "é necessária uma referência de objeto para o campo não estático, método ou propriedade 'System.Web.UI.Page.ClientScript.get' referindo-se ao pedaço de código 'Page.Clientscript;.' Graças

Foi útil?

Solução

Eu não tenho certeza eu compreendo perfeitamente a seqüência do que você está tentando fazer, o que está do lado do cliente eo que não é ....

No entanto, você pode adicionar um método javascript Start-up para a página, que passaria a chamar o WebMethod. Ao chamar um WebMethod via javascript, você pode adicionar uma função de chamada de retorno, que passaria então a ser chamado quando o WebMethod retorna.

Se você adicionar um tag ScriptManager na sua página, você pode chamar WebMethods definidos na página via Javascript.

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

A partir da função Page_Load você pode adicionar uma chamada para o seu WebMethod ..

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

Callback_Function representa uma função javascript que será executada após o WebMethod é chamado ...

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

EDIT:

Encontrado este link para controles Web ADF . É isso que você está usando ??

A partir dessa página, parece que algo como isso vai fazer um 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);
}

Outras dicas

Se o acima é como você está chamando RegisterStartupScript, não vai funcionar porque você não tem uma referência para o objeto "Página".

bgchange no seu exemplo se estende Object (assumindo IMapServerDropDownBoxAction é uma interface), o que significa que não há Page instância para você referência.

Este que você fez exatamente a mesma coisa a partir de um Asp.Net Page ou UserControl, ele iria trabalhar, porque a página seria uma referência 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);          
    }
}

Você não pode chamar métodos dentro de um navegador diretamente do servidor. Você pode, no entanto, adicionar funções JavaScript para a resposta que irá executar métodos dentro do navegador.

Dentro do método ServerAction, faça o seguinte

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

Page.RegisterStartupScript("ForceClientToCallServerMethod", script);

Mais informações aqui

hmmm ... a pergunta mudou dramaticamente desde a minha resposta original.

Agora eu acho que a resposta é não. Mas eu posso estar errado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top