【问题标题】:C# asp.net WebForm add JS and run it from code behindC# asp.net WebForm 添加 JS 并从后面的代码运行它
【发布时间】:2019-01-02 14:47:00
【问题描述】:

我有这个WebFormHtml

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GetLink.aspx.cs" Inherits="GetLink" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <input type="hidden" runat="server" id="hdnVal" value="55"/>

    </div>
    </form>
</body>
</html>

我想在这段代码中添加一个JavaScript 函数并使用这段代码运行它:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!ClientScript.IsStartupScriptRegistered("key1"))
        {
            ClientScript.RegisterStartupScript(GetType(), "key1", @"<script type=""text/javascript"">function callMyJSFunction() { document.getElementById(""hdnVal"").value='5'; }</script>");
        }

        ClientScript.RegisterStartupScript(this.GetType(), "key1", "<script>callMyJSFunction();</script>");

        string resutOfExecuteJavaScript = hdnVal.Value;
    }

当我运行它时,hdnVal 的值保持55 的值不变。知道是什么问题吗?

【问题讨论】:

  • 仔细研究this页面,你需要的一切都在那里。特别注意多次注册同一个key的脚本部分。

标签: c# asp.net webforms


【解决方案1】:

在注册 callMyJSFunction 的 JavaScript 函数时,您在 Page_Load 事件中的代码应该调用 ClientScript.RegisterClientScriptBlock,而在您的代码中,您将此函数注册为启动脚本。这是您的代码中唯一的错误。

因此,如果您将服务器端代码更改为如下所示,那么它将按照您的预期工作。

protected void Page_Load(object sender, EventArgs e)
{
    if (!ClientScript.IsClientScriptBlockRegistered("key1"))
    {
        //register your javascript function
        ClientScript.RegisterClientScriptBlock(GetType(), "key1", @"<script type=""text/javascript"">function callMyJSFunction() { document.getElementById(""hdnVal"").value='5'; }</script>");
    }

    ClientScript.RegisterStartupScript(this.GetType(), "key1", "<script>callMyJSFunction();</script>");

    string resutOfExecuteJavaScript = hdnVal.Value;
}

【讨论】:

    【解决方案2】:

    第一个问题是您在 Clientscript 中创建函数,而您可以简单地将函数放入 javascript 中,然后执行调用部分。第二个问题是您的函数调用该隐藏字段以查看其在文档中不可用的时间意味着停止将您的代码放在页面加载上并改用按钮单击事件。第三个问题是您在很多不需要的地方使用了多个引号。

    这对我有用

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script>
          $('document').ready()
          {
              function callMyJSFunction()
              {
                  debugger;
                  document.getElementById('hdnVal').value = '5';
     alert(document.getElementById('hdnVal').value);
              }
              // - including fonts, images, etc.
          }
       </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
         <input type="hidden" runat="server" id="hdnVal" value="55"/>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        </div>
        </form>
    </body>
    </html>
    

    在cs页面上

      protected void Button1_Click(object sender, EventArgs e)
        {
    
    
            ClientScript.RegisterStartupScript(this.GetType(), "key1", "<script>callMyJSFunction()</script>",false);
    
            string resutOfExecuteJavaScript = hdnVal.Value;
        }
    

    【讨论】:

    • 您可以查看我刚刚发布的答案。您在注册 JavaScript 函数时调用了错误的方法,我已经在我的回答中解释了。
    猜你喜欢
    • 2012-01-04
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多