如何从服务器端调用 javascript 函数

How can I call a javascript function from server side

我尝试从另一个 c# 函数调用 javascript 函数,但我的控制台出现错误

Uncaught ReferenceError: updateState is not defined

.ascx 文件

<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 文件

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

我不知道如何解决这个问题有人知道吗?

您可能忘记了注册脚本。试试这种不同的方法。

<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

解决方案是:

.ascx.cs

protected void Btn_Modify_state_Click(object sender, EventArgs e)
{
    Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "<script type='text/javascript'>updateState();</script>");
}