【问题标题】:Call JavaScript function (in aspx) on aspx.cs using a button使用按钮在 aspx.cs 上调用 JavaScript 函数(在 aspx 中)
【发布时间】:2013-01-12 18:54:14
【问题描述】:

我有这个aspx:

 <body>
    <div>
    <script type="text/javascript">
        function NewPage() {
            document.location.href = "http://www.nextservice.pt/"
        }
        </script>
         <form id="form1" runat="server">
 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

                    <asp:Button ID="Btn2" runat="server" Text="OK" onclick="Button2_Click" />

            CODE1: <asp:Label ID="Label1" runat="server" Text="Label" ForeColor="#CC0000" />
        </form>
        </div>
</body>

我正在使用网络表单,我不会在 aspx.cs 上调用此按钮

   public partial class SITE_TESTER : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button2_Click (object sender, EventArgs e)
    {
        string code = TextBox1.Text.ToString();

        if (!verifyCode(code))  // comparing users from table 
        {
            Label1.Text = "Not Exists";  //for invalid code
        }
        else
        {
            Label1.Text = "Exist";  //for sucsseful code
            /*

            I Wont call my JavaScript Function here!!!!

            */
        }
    }
}

【问题讨论】:

  • 那个javascript函数应该做什么?实际上,你不能在服务器端运行 JS。但是当服务器将返回整个 HTML 时,您可以准备在客户端执行它。您是说只想更改 document.location 吗?
  • 我可以在服务器上运行 JS,但在那之前我还有更多的 JS 需要调用。我的第一个 JS 获取了 facebook 的令牌,我需要将该令牌保存在数据库中。谢谢
  • 不知道你在“在服务器上运行 JS”是什么意思(如果你已经知道答案,为什么你要问如何做到这一点),但据我所知,你正在接受带有 JS 的令牌。一旦你有了它,你可以运行 AJAX 调用到服务器,它将把它放入数据库。
  • 根据你的观点(FAngel)我想改变我的方案,我会尝试在 aspx.cs(在服务器位置)上制作所有 JS 代码,并通过 ajax 或其他方式获取令牌。谢谢

标签: javascript asp.net .net webforms


【解决方案1】:

您可以通过以下方式从asp.net中的服务器端调用javascript方法:

protected void button_Click(object sender , EventArgs e)
{
        string jsMethodName= = "NewPage()";
        ScriptManager.RegisterClientScriptBlock(this, typeof(string), "uniqueKey", jsMethodName, true);

      //or
      //ScriptManager.RegisterStartupScript(this, GetType(), "NewPage()", false); 
}

您可以使用ScriptManager.RegisterStartupScriptScriptManager.RegisterClientScriptBlock

所以两者的区别解释如下:

假设我们有一个带有以下表单标签的 .aspx 页面:(行 没有。供参考)

1. <form id="Form1" runat="server">
2. ..
3. ..
4. ..
5. </form>

现在让我们看看每种方法的主要区别:

A. Page.RegisterClientScriptBlock() 将插入 block 的脚本 在第 2 行之前。 Page.RegisterStartupScript() 将在第 4 行之后插入脚本。

B. Page.RegisterClientScriptBlock() 通常用于脚本 封装在函数中。 (因此“块”这个词) Page.RegisterStartupScript() 可以用于任何脚本,即使它是 不在函数中。

C. Page.RegisterClientScriptBlock() 应该用于以下功能 不需要在页面加载时运行。 Page.RegisterStartupScript() 应该用于必须运行的脚本 在页面加载时。

D. Page.RegisterClientScriptBlock() 应该用于执行以下操作的脚本 不需要创建表单元素。 Page.RegisterStartupScript() 应该用于需要的脚本 要创建的表单元素并使用对它们的引用。

请注意,所有 4 个差异本质上都与每个差异相关 其他(它们建立在前一个的基础上)。差异放在一行中 有时可能过于微妙。

您可以通过herehere 了解更多信息

【讨论】:

  • 哦不??它只是一个随机的唯一字符串。如果您要注册多个 ClientScriptBlocks,它会很方便
  • 有效(但不是全部),这个方法无效:document.location.href = "nextservice.pt"
【解决方案2】:

您可以添加一个脚本,该脚本将在页面加载到浏览器时执行:

Page.RegisterStartupScript("unique_key", "<script type=\"text/javascript\">NewPage()</script>"); // but this is deprecated function

或者像这样:

ClientScript.RegisterClientScriptBlock(this.GetType(), "unique_key", "NewPage()", true);            

但如果你只是想做一个重定向(我可以从你的 NewPage 函数中看到),你可以这样做:

Response.Redirect("http://www.example.com");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2018-10-10
    • 2014-09-12
    • 2010-12-29
    相关资源
    最近更新 更多