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

Я внутри ...

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», ссылаясь на фрагмент кода «Page.Clientscript;» Спасибо.

Не могли бы вы рассказать немного больше о том, чем хотели бы заниматься? Вы архитектура и все такое? А чего бы вы хотели соучастникам на более высоком уровне?

Jesper Blad Jensen 30.09.2008 20:14

Что вы имеете в виду под DoSome (), «запускающим некоторый JavaScript»?

Dave Ward 30.09.2008 21:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
2
15 567
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

Ответ принят как подходящий

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

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

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

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

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

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

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

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

Когда сработает тревога? Мне нужно, чтобы это произошло после завершения метода. В вашем примере будет ли предупреждение срабатывать при загрузке страницы?

mrjrdnthms 30.09.2008 21:07

Предупреждение будет срабатывать после вызова WebMethod. В этом примере последовательность будет выглядеть так: PageLoad (сервер) -> вызов PageMethods (javascript) -> DoSome WebMethod (сервер) -> Callback_Function (javascript).

Scott Nichols 30.09.2008 21:13

Ты обалденный! Веб-элементы управления ADF - это именно то, что я использую, и ваш код работал как шарм. Вы сделали все возможное. Я люблю переполнение стека из-за таких людей, как ты!

mrjrdnthms 30.09.2008 21:35

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

В методе ServerAction выполните следующие действия.

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

Page.RegisterStartupScript("ForceClientToCallServerMethod", script);

Больше информации здесь

Да, когда я вставляю его, он подчеркивает всю строку Page.RegisterStartupScript и говорит: «Ссылка на объект требуется для нестатического поля, метода или свойства 'System.Web.UI.Page.RegisterStartupScript' ...

mrjrdnthms 30.09.2008 21:04

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

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

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

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

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