【问题标题】:How to call JavaScript/jQuery function from .cs file C#如何从 .cs 文件 C# 调用 JavaScript/jQuery 函数
【发布时间】:2011-07-20 13:06:44
【问题描述】:

我正在处理 asp.net (C#) 项目,其中包括一些页面文件 (aspx, aspx.cs) 和一些仅 (.cs) 文件。我可以使用scriptregister 从页面文件(aspx、aspx.cs)访问 JavaScript/jQuery 函数。但我的问题是如何从 (.cs) 文件访问 JavaScript/jQuery 函数。我在 (.cs) 文件中生成了一些 html 标签,因此需要从 (.cs) 类中调用 JavaScript/jQuery 函数。

我拥有的文件是(例如):

  • 默认.aspx
  • Default.aspx.cs
  • 还有Web.cs(我关心的是从web.cs调用JavaScript/jQuery函数)

实际上,我要做的是在 Web.cs(业务对象)中生成一些 HTML 代码,而在 web.cs 中生成 HTML 代码时,我需要一些由 jQuery 函数生成的其他动态 HTML 代码,其输出是我的关注:var output ="My HTML Code Generated by jQuery function"

现在我需要将上面的 jQuery 输出与 Web.cs HTML 代码生成合并。

请告诉我如何从 web.cs 调用 jQuery 函数并将结果从 jQuery 取回到 web.cs 以便合并?

谢谢

【问题讨论】:

    标签: c# javascript jquery asp.net


    【解决方案1】:

    老实说,这个问题没有多大意义。您可能对这一切如何协同工作存在误解。

    c# 代码在 web 服务器上运行,输出是 Html 代码,向下呈现到浏览器,包括 javascript。

    Javascript 被加载到浏览器中并在客户端计算机上本地执行。

    如果您尝试使用 javascript 操作或控制客户端页面加载的某些方面,或者将脚本添加到页面本身(.aspx 文件)注册并使用 Client.Register 进行流式传输 api调用,或添加 标签将其导入文件中。

    我不知道 Web.cs 类在做什么,我会假设它是某种逻辑或业务对象。您需要将客户端脚本的需求从它传达回表示层,以使其在客户端运行。

    如果您以某种方式认为可以从服务器端运行 javascript,那您就错了。

    【讨论】:

      【解决方案2】:

      ASP 代码是服务器端的。
      javascript 在客户端。

      你不能真正调用 javascript。
      您可以通过将生成 onload javascript 方法的 ASP 代码创建一个 html 文件。
      然后当 html 被加载时,javascript 就会运行。

      【讨论】:

        【解决方案3】:

        这是使用 Page.RegisterStartupScript 方法

        完成的
            <%@ Page Language="C#"%>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <script runat="server">
          public void Page_Load(Object sender, EventArgs e)
          {
            String csname1 = "PopupScript";
            String csname2 = "ButtonClickScript";
        
            if (!IsClientScriptBlockRegistered(csname1))
            {
                String cstext1 = "<script type=\"text/javascript\">" +
                    "alert('Hello World');</" + "script>";
                RegisterStartupScript(csname1, cstext1);
            }
        
            if (!IsClientScriptBlockRegistered(csname2))
            {
              StringBuilder cstext2 = new StringBuilder();
              cstext2.Append("<script type=\"text/javascript\"> function DoClick() {");
              cstext2.Append("Form1.Message.value='Text from client script.'} </");
              cstext2.Append("script>");
              RegisterClientScriptBlock(csname2, cstext2.ToString());
            }
          }
        </script>
        <html  >
          <head>
            <title>RegisterClientScriptBlock Example</title>
          </head>
          <body>
             <form id="Form1"
                 runat="server">
                <input type="text" id="Message" /> <input type="button" value="ClickMe" onclick="DoClick()" />
             </form>
          </body>
        </html>
        

        【讨论】:

        • 我已经修改了我的问题,请看一下。
        【解决方案4】:

        脚本注册实际上发生在“页面”对象上,即 Web.cs 无权访问页面来注册脚本。例如,如果您希望 Web.cs 在 Default.aspx 页面上注册脚本,则需要通过接口或类定义授予对 Default.aspx/cs“Page”对象的 Page.ClientScript.RegisterClientScriptBlock 方法的访问权限。

        【讨论】:

        • 我已经修改了我的问题,请看一下。
        【解决方案5】:

        JavaScript 是客户端,c# 是服务器端,因此您不能从服务器端调用 JavaScript,但您可以安排在客户端呈现页面时执行 JavaScript...

        http://msdn.microsoft.com/en-us/library/aa478975.aspx

        【讨论】:

          【解决方案6】:

          除非你有一个绝对可靠的用例,否则你应该重新考虑让你的 JavaScript 从 c# 呈现。

          通常,将两者分开要简单得多。使用 c# 生成标记,并“标记”适当的元素(可能使用 CSS 类,因为 ASP.NET 对 id 的处理非常糟糕)。

          然后简单地使用 jQuery 来查找和操作这些标记的元素,但是使用外部 js 脚本来执行此操作,而不是内联生成 JavaScript 本身。

          【讨论】:

            【解决方案7】:

            您可以将 ScriptManager 传递给 Web.cs,然后使用您在代码隐藏中使用的相同方法,但您最好只从 Web.cs 构造和返回 javascript 字符串,并仍然从你的代码隐藏就像你一直在做的那样。

            【讨论】:

            • 我已经修改了我的问题,请看一下。
            【解决方案8】:

            如果您只是想从一个独立的 cs 文件注册一些客户端脚本,我可以看到此工作的唯一方法是将您的函数传递给页面的 ClientScriptManager 的引用。

            【讨论】:

            • 我已经修改了我的问题,请看一下。
            猜你喜欢
            • 2011-10-10
            • 1970-01-01
            • 1970-01-01
            • 2018-05-24
            • 2014-04-05
            • 1970-01-01
            • 1970-01-01
            • 2012-07-17
            • 1970-01-01
            相关资源
            最近更新 更多