Не удается вызвать функцию javascript из c # в Asp.NET

#javascript #c# #asp.net #.net

#javascript #c# #asp.net #.net

Вопрос:

Эта проблема обсуждается много раз на этом сайте, но нигде я не нашел решения своей проблемы.

Я выполнил следующие шаги.

1. Создал JS-функцию.

  function showModal() {
            alert("called");
       }
 

2. Добавлен менеджер сценариев в aspx-файл

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

3. Создал метод в файле .cs

  [System.Web.Services.WebMethod()]
        [System.Web.Script.Services.ScriptMethod()] 
        protected void register_user(object sender, EventArgs e)
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "showModal", "javascript:showModal(); ", true);
            log.Debug("register_user is called");


        }
 

Но это не вызов функции JS.

Комментарии:

1. @Div. Это была просто опечатка.

Ответ №1:

Может быть, это связано с тем, что вы не закрыли свою функцию javascript:

 function showModal() {
            alert("called");
}
 

Или вы также можете попробовать это:

Замените эту строку:

 Page.ClientScript.RegisterStartupScript(this.GetType(), "showModal", "javascript:showModal(); ", true);
 

с

 Page.ClientScript.RegisterStartupScript(this.GetType(), "Message", "showModal(); ", true); // correct
 

Комментарии:

1. Я изменил в соответствии с вашим предложением. все еще не работает.

Ответ №2:

Прежде всего, я не думаю, что вызов Js-функции из aspx.cs — хорошая идея.

В любом случае, из вашего фрагмента просто измените на это:

 Page.ClientScript.RegisterStartupScript(this.GetType(), "showModal", "showModal()", true);
 

Обратите внимание на 3-й параметр: "showModal()"

А также, ваша JS-функция «ShowModal ()», работает ли она при нажатии на эту кнопку? <input type="button" value="Submit" onclick="showModal();"/>

Ответ №3:

Что сработало для меня, так это:

Вместо того , чтобы —

 Page.ClientScript.RegisterStartupScript(this.GetType(), "showModal", "javascript:showModal(); ", true);
 

Я добавил —

 ScriptManager.RegisterStartupScript(this,GetType(), "Message", "showModal();", true);
 

и это сработало.

Ответ №4:

Вы смешиваете так много вещей.

Если вы хотите добавить javascript из исходного кода в свой html. Это должно быть расположено в каком-то глобальном событии Page_Load или PreRender .

 Page.ClientScript.RegisterStartupScript(this.GetType(), "showModal", "YourJavascriptCode", true);
 

Если вы хотите вызвать метод в aspx из вызова AJAX, который должен возвращать ответ

     [System.Web.Services.WebMethod()]
    [System.Web.Script.Services.ScriptMethod()] 
    public static string register_user(object sender, EventArgs e)
    {
         //you can return a class->Json
         return stuff;
    }
 

Если вы хотите выполнить javascript на клиенте, нажмите вашу кнопку. Я полагаю, вы этого хотите!

     YourButton.Attributes["onclick"]= "javaScriptFunction()";
    //if you want to not execute server side
    YourButton.Attributes["onclick"]= "javaScriptFunction(); return false";
 

Вот самый простой способ добавления функции javascript к вашей кнопке asp.

 <asp:Button ID="RegisterBtn" runat="server" Text="Register"  OnClientClick="showModal()" onclick="register_user"/>
 

Комментарии:

1. привет. Это всего лишь демонстрационная функция JS. Мне нужно добавить больше строк кода после успешного запуска.

2. @DKR вы можете добавить сотни строк кода, если вы не понимаете эти 3 вещи, что они делают, вы не можете добавить даже 1 строку

3. согласно вашей модификации в ответе, что, если я хочу вызвать функцию JS при нажатии кнопки, а не при загрузке страницы?

4. @DKR вы ничего не вызываете с помощью RegisterStartupScript, вы добавляете скрипт в html. Вызов выполняется, когда СНАЧАЛА присоедините ваш метод javascript к атрибуту кнопки onclick и после этого вы нажмете кнопку. Также сначала выполняется клиентская сторона, а затем серверная.

Ответ №5:

Добавить пространство имен

использование System.Web.UI;

Замените эту строку:

Страница.Клиентский скрипт.RegisterStartupScript(это.GetType(), «ShowModal», «javascript:ShowModal(); «, true);

с

ScriptManager.RegisterStartupScript(это, это.GetType(), «Сообщение», «ShowModal();», true);

он работает нормально