Как я могу вызвать функцию javascript изнутри метода?

StackOverflow https://stackoverflow.com/questions/153776

  •  03-07-2019
  •  | 
  •  

Вопрос

Я нахожусь внутри...

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

и после "некоторого кода" я хочу запустить

[WebMethod]
public static void DoSome()
{

}

Который запускает некоторый javascript.Возможно ли это?

Хорошо, поменяем методы здесь.Я смог вызвать dosome();который сработал, но не запустил javascript.Я пытался использовать метод registerstartupscript, но не совсем понимаю, как его реализовать.Вот что я попробовал:

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

}

Я получил код registerstartupscript из примера msdn.Очевидно, что я неправильно это реализую.В настоящее время vs говорит, что "Ссылка на объект требуется для нестатического поля, метода или свойства 'System.Web.UI.Page.ClientScript.get'ссылается на страницу фрагмента кода ".Clientscript;" Спасибо.

Это было полезно?

Решение

Я не уверен, что полностью понимаю последовательность того, что вы пытаетесь сделать, что на стороне клиента, а что нет....

Однако вы могли бы добавить на страницу запускаемый javascript-метод, который затем вызывал бы WebMethod.При вызове веб-метода через javascript вы можете добавить функцию обратного вызова, которая затем будет вызываться, когда веб-метод вернется.

Если вы добавите тег ScriptManager на свою страницу, вы можете вызывать веб-методы, определенные на странице, с помощью Javascript.

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

Из функции Page_Load вы можете добавить вызов к вашему веб-методу..

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

Callback_Function представляет собой функцию javascript, которая будет выполнена после вызова веб-метода...

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

Редактировать:

Нашел эту ссылку для Элементы управления веб-ADF.Это то, что вы используете??

С этой страницы похоже, что что-то вроде этого выполнит обратный вызов 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);
}

Другие советы

Если вы вызываете RegisterStartupScript, как описано выше, это не сработает, потому что у вас нет ссылки на объект "Страница".

bgchange в вашем примере расширяет Object (предполагая, что IMapServerDropDownBoxAction является интерфейсом), что означает, что нет экземпляра Страницы, на который вы могли бы ссылаться.

Это вы сделали точно так же с помощью Asp.Net Page или UserControl, это сработало бы, потому что Page была бы действительной ссылкой.

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

Вы не можете вызывать методы в браузере непосредственно с сервера.Однако вы можете добавить в ответ функции javascript, которые будут выполнять методы в браузере.

В рамках метода ServerAction выполните следующие действия

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

Page.RegisterStartupScript("ForceClientToCallServerMethod", script);

Более подробная информация здесь

хммм...вопрос резко изменился по сравнению с моим первоначальным ответом.

Теперь я думаю, что ответ будет отрицательным.Но я могу ошибаться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top