Как я могу вызвать функцию javascript со стороны сервера - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь вызвать функцию javascript из другой функции c#, но у меня ошибка в консоли

Uncaught ReferenceError: updateState не определено

.ascx file

<script>    
    function updateState(){
        console.log("test")
    }   
</script>

<button runat="server" ID="Btn_Modify_state" onserverclick="Btn_Modify_state_Click">
    <i class="fas fa-edit"></i>
</button>

.ascx.cs file

protected void Btn_Modify_state_Click(object sender, EventArgs e)
{
    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "script", "updateState();", true);
}

Я не знаю, как решить эту проблему у кого-нибудь есть идеи?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Решение было сделать это:

.ascx.cs

protected void Btn_Modify_state_Click(object sender, EventArgs e)
{
    Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "<script type='text/javascript'>updateState();</script>");
}
0 голосов
/ 09 марта 2020

Возможно, вы забыли зарегистрировать скрипт. Вместо этого попробуйте этот другой подход.

<script runat="server">
  public void Page_Load(Object sender, EventArgs e)
  {
    // Define the name and type of the client script on the page.
    String csName = "updateState";
    Type csType = this.GetType();

    // Get a ClientScriptManager reference from the Page class.
    ClientScriptManager cs = Page.ClientScript;

    // Check to see if the client script is already registered.
    if (!cs.IsClientScriptBlockRegistered(csType, csName))
    {
      // If not, redefine your script
      var csText = $"
      <script type=\"text/javascript\">
        function updateState(){
          console.log("test")
        }
      </script>";
      cs.RegisterClientScriptBlock(csType, csName, csText.ToString());
    }
  }
</script>

Источник: https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.clientscriptmanager.registerclientscriptblock?view=netframework-4.8

...