【问题标题】:Call VB function from javascript从 javascript 调用 VB 函数
【发布时间】:2017-01-30 13:07:01
【问题描述】:

我的 asp 文件中有一个 javascript,我想从中调用一个 vb 函数。

Asp javascript 函数:

<script type="text/javascript">
    function functionName(sender, args) {
        var variable = args.get_value();
        PageMethods.VBFunctionName(variable);
    }
</script>

VB中的函数:

<System.Web.Services.WebMethod()>
Public Shared Function VBFunctionName(variable As String) As String
    Dim result As String = variable
    Return result.ToString()
End Function

而且,我还添加了 ScriptManager 来启用页面方法:

  <asp:ScriptManager ID="sm" runat="server" EnablePageMethods="True"></asp:ScriptManager>

但是,它不起作用!在 asp 文件中,当我键入“PageMethods”时,此选项的自动完成功能不可用。所以,我认为错误在于 EnablePageMethods。

我该如何解决这个问题?

【问题讨论】:

  • 您在运行应用程序时是否收到任何错误消息?
  • 没有错误,但是“PageMethods.VBFunctionName(variable);”行没有调用函数。当我开始键入 PageMet... 并尝试使用 CTRL + 空格来选择 PageMethods 函数时,该函数不可用。
  • 你的浏览器控制台有错误方法吗?您是否在页面中包含 ScriptManager 标记之前您的 javascript 函数?
  • 浏览器控制台中没有错误,是的,我在 js 函数之前包含了 ScriptManager 标记..
  • 你怎么打电话给functionName?你在aspx页面吗?

标签: asp.net vb.net


【解决方案1】:

您的代码的问题是您正在进行 Ajax 调用,但没有设置任何 回调 来读取来自服务器的响应。您需要定义一个回调函数(也可以选择一个失败函数)来设置您要对响应执行的操作。

所以你的script 标签应该是这样的:-

<script type="text/javascript">
    function functionName(sender, args) {
        var variable = args.get_value();
        PageMethods.VBFunctionName(variable,onSuccess); //pass callback function
    }
    function onSuccess(response) {
        alert(response); //Do whatever you wanna do with response.
    }
</script>

另外,由于我们在 JavaScript 脚本标签中工作,我认为 Visual Studio 无法向您推荐服务器方法。

【讨论】:

    【解决方案2】:

    我更喜欢使用 JQuery 从 javascript 调用 VB 函数。

    <script type="text/javascript">
       function functionName(sender, args) {
          var variable = args.get_value();
    
          $.get( "@Url.Action("VBFunctionName")?variable=" + variable, function( data ) {
             alert(data);
          });
       }
    </script>
    

    【讨论】: