【问题标题】:ASP.NET call a Javascript functionASP.NET 调用一个 Javascript 函数
【发布时间】:2015-03-14 02:12:30
【问题描述】:

我正在开发一个使用 IP Payments 来处理交易的项目。该项目涉及一个用 ASP 编写的 Web 表单,以及用 C# 编写的 Code-Behind。

IPP 提供 iFrame 实施,您可以在页面中放置 iFrame,并显示一个小型 IPP 页面,其中包含用于输入信用卡信息的字段。这背后的想法是信用卡信息将仅由 IPP 处理,而不会由运行页面的服务器处理,因此不需要确保卡数据的安全。

为了在 iFrame 中显示 IPP 页面,需要使用 IPP 启动会话。服务器启动会话,并传入一个 SessionID 变量。会话启动成功后,将向服务器返回一个安全会话令牌。然后,服务器需要“强制”客户端的浏览器获取或发布 SessionID 和 SST(安全会话令牌)到 IPP 网站。这就是我的问题所在。

我在 ASPX 页面中编写了一个 Javascript 函数,该函数将接受两个参数 - SessionID 和 SST - 并将它们发送到 IPP 网站。我现在尝试在成功启动 IPP 会话后从我的 C# 代码调用此 Javascript 函数。但是,我已经完全做不到了。

我进行了很多搜索,但我不断遇到的一个答案是使用 RegisterStartupScript 或 RegisterClientScriptBlock。问题是,这些似乎直接将文本插入页面,而不是调用现有函数。假设我通过其中一个函数将我的函数插入页面而不是自己将其写入页面,它仍然不能解决我如何调用所述函数的问题。

现在我可能会以错误的方式解决这个问题,并且有一种更好的方法可以让客户端的浏览器获取/发布 SessionID 和 SST;如果是这样,请告诉我。我对 Web 编程缺乏经验,因此我边走边学,并在此过程中提出了很可能并不理想的解决方案。

提前致谢。

【问题讨论】:

  • “安全会话令牌”如何返回服务器?
  • 一种选择是制作公共变量并将它们直接嵌入到 JavaScript 中。我从来没有真正看到RegisterClientScriptBlock 的原因...似乎比完成相同事情的其他方法更令人困惑...向客户端呈现正确的 HTML。
  • 它作为某些 HTML 的一部分返回。我正在提取 SST 并将其放入一个字符串中。

标签: javascript c# asp.net


【解决方案1】:

我认为这应该可行:

假设您的 HTML 中有这样的内容:

<html>
    <head>
       <script>
          function sendValuesToIPP(sessionId, sst){
              //do stuff
          }
       </script>
    </head>
</html>

如果您在 C# 代码中执行此操作,它应该可以工作

ClientScriptManager.RegisterStartupScript(
    this.Type,
    "some_key_you_want_to_identify_it",
    string.Format("sendValuesToIPP('{0}','{1}')", SessionID, SST),
    true);

请记住,我假设您在服务器端拥有 SessionID 和 SST 属性,您可以从任何您想要的地方获取它们,只需将它们添加到在您的 ASPX 中注册时将实际调用该函数的字符串中。

【讨论】:

  • 该 C# 代码是否应该在 ASPX 页面中?我发现使用 RegisterStartupScript 的问题是我不知道如何调用 Javascript 函数。我假设密钥是您在 C# 代码中用来调用该函数的密钥,但是在实际执行 RegisterStartupScript 调用之前,该密钥是没有意义的,我无法使用它,因为它会导致错误。
  • 密钥只是你分配给它的一些字符串,以防你以后想删除注册的脚本。它很少使用,所以你可以放任何你想要的东西。真正调用 Javascript 函数的是第三个参数。当整行在 C# 中执行时,它会注入类似 的东西,它实际上会运行您在 ASPX 中已有的 javascript 函数。你试过了吗?代码应位于 ASPX 页面的 .cs 文件中的任何位置。
  • 刚试了一下,不开心。这是我使用的代码: Page.ClientScript.RegisterStartupScript(this.GetType(), "InitiateIPP", string.Format("
  • Page.ClientScript 更改为ClientScriptManager。确保您的正文中有一个 ScriptManager,如下所示:stackoverflow.com/questions/13473808/…。最后,我认为您缺少string.Format 中的&lt;/script&gt; 结束标记。如果javascript函数被称为initiateIPP它真的应该工作。你很亲密,不要失望。
  • 丢失的 是问题所在。 xD 感谢您发现这一点!现在调用该函数;不幸的是,IPP 的东西不起作用,但这是我必须解决的另一个错误。那么,RegisterStartupScript 可以用来调用脚本还是编写脚本插入呢?实际上,它似乎只是将您传入的任何内容直接插入到页面中......
猜你喜欢
  • 1970-01-01
  • 2010-09-05
  • 2011-04-30
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多