【问题标题】:Calling Javascript (Raphael.js library) from C# codebehind in ASP.NET从 ASP.NET 中的 C# 代码隐藏调用 Javascript(Raphael.js 库)
【发布时间】:2012-05-23 13:36:23
【问题描述】:

我正在尝试从我的 C# 代码中调用一些函数。我正在寻找如何做到这一点,并且能够在我想要的时候调用一个警报来显示它。但是,我不知道如何调用其他东西!

这是我需要从后面的代码中调用的:

var paper = Raphael("paper1", 800, 800);
var Plan = paper.path("M100, 100 a 50, 50 0 0,1 50, 50 l -50 0 l 0, -50");
Plan.attr({ fill: "#FF6600" });

我已经在一个纯 HTML 文件上尝试过这些,但我无法使用它。我也在使用母版页,我发现的大多数示例都没有母版页,所以我很迷茫。

有人可以帮忙吗?

【问题讨论】:

  • 那你如何让alert() 调用工作呢?您不能真正“调用”浏览器上的任何内容,您只能输出一个 <script> 块作为浏览器将处理的页面的一部分。一旦你的页面完成显示,你就不能再这样做了。 (尽管有 AJAX。)
  • 我在后面的代码中执行此操作,当下拉所选项目更改时,ClientScript.RegisterStartupScript(typeof(Page), "SymbolError", "", false);
  • 在您的问题中调用代码块应该以同样的方式工作。当你尝试它时会发生什么? JS 代码是否完全输出到浏览器?浏览器的JS控制台有错误吗?
  • 但是我如何在错误的地方写下所有的行?我是这方面的新手,我看过一些教程,但仍然不是专家:/
  • 您是否尝试过只是复制粘贴 JS 代码来代替 alert(),然后尝试修复出现的任何错误?

标签: c# javascript asp.net raphael code-behind


【解决方案1】:

在 .aspx 页面中创建一个 Javascript 函数,然后从后面的代码中调用该函数,如下所示:

html代码中的函数

function dostuff()
{
  // code here
}

C# code in code behind
 protected void callmethod()
    {
        StringBuilder oSB = new StringBuilder();
         Type cstype = this.GetType();


        try
        {
            oSB.Append("<script language=javaScript>");
            oSB.Append("dostuff();");
            oSB.Append("</script>");
            Page.ClientScript.RegisterClientScriptBlock(cstype, Guid.NewGuid().ToString(), oSB.ToString(), false);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            oSB = null;
        }
    }

【讨论】:

  • 我试过这个并且警报有效。这就是我现在在我的 aspx 文件
  • 在后面的代码中:StringBuilder oSB = new StringBuilder();类型 cstype = this.GetType(); oSB.Append(""); Page.ClientScript.RegisterClientScriptBlock(cstype, Guid.NewGuid().ToString(), oSB.ToString(), false);但它不工作!有什么想法吗?
  • "); Page.ClientScript.RegisterClientScriptBlock(cstype,Guid .NewGuid().ToString(), oSB.ToString(), false); 这应该可以工作。
  • 确保脚本加载到 .html / .aspx 页面的顶部,这不是最佳做法,但我发现页面未完全加载时出现问题。
【解决方案2】:

Javascript 只能在客户端调用。如果你绝对需要从你的服务器端调用它,你可以使用 asp:HiddenField 的值作为你需要在返回时执行 javascript 代码的标志,然后在满足要求时运行所需的 javascript。

但这不是一个好的解决方案,您应该尝试将服务器和客户端分开。

无论如何,希望这会有所帮助!

【讨论】:

  • 那么你有什么建议能够做到这一点?我只需要根据从数据库中获取的某些项目的状态在屏幕上打印一些形状。我用 CSS 做到了这一点,但愚蠢的 IE 无法使用它。
猜你喜欢
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 2015-05-03
  • 2012-05-05
相关资源
最近更新 更多