【问题标题】:call a asp.net vb function from jquery从 jquery 调用 asp.net vb 函数
【发布时间】:2023-03-12 00:41:01
【问题描述】:

尝试从 javascript (jquery) 调用 vb 代码中的函数时出现以下错误

在视图 (.aspx) 我有以下代码:

<asp:ImageButton ID="imgbtnRetirar" runat="server" OnClientClick="return alerteliminar();" IdEliminar='<%# Eval("CODIGO") %>'
                                                            ImageUrl="~/Images/ic_eliminar.gif" ToolTip="Borrar al Usuario Aprobador"></asp:ImageButton>

在脚本中我有以下代码:

<script type="text/javascript">
        function alerteliminar() {
        var letra="cancel";
        $("#texto").text("Seguro que desea Eliminar al usuario autorizador?");
        $( "#dialog-message" ).dialog({
          modal: true,
          buttons: {
            "Ok": function() {
              $( this ).dialog( "close" );
               var id = $("#ctl00_ctphFrmContent_grvLista_ctl02_imgbtnRetirar").attr("ideliminar");
                $.ajax(
                {
                    type: "POST",
                    url: "AprobadoresxModificacion.aspx/EliminarRegistro",
                    data: "{'Id':'" + id + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                        console.log(msg)
                    }
                });
            },
            "Cancel": function() {
            $( this ).dialog("Eliminar");
            }
          }
        });
      }
    </script>

在 vb 代码中,我有以下内容:

<System.Web.Services.WebMethod()> _
    Public Function EliminarRegistro(ByVal Id As Integer) As String
        Try
            If Me.BorrarAprobador(Integer.Parse(Id)) Then
                Me.btnBuscar_Click(Nothing, Nothing)
                Return "OK"
            Else
                Me.Mensaje("No se pudo borrar el registro")
                Return "BAD"
            End If
        Catch ex As Exception
            Return ex.Message
        End Try
    End Function

我得到的错误如下: http://localhost:2091/WebSMEX/Paginas/Mantenimiento/AprobadoresxModificacion.aspx/EliminarRegistro500(内部服务器错误)

【问题讨论】:

  • 一种可能性是您的Id 参数是Integer,但您在JSON 中将其作为带引号的字符串值传递:data: "{'Id':'" + id + "'}"。尝试删除值周围的引号:data: "{'Id':" + id + "}"
  • 首先,您需要了解您不是从 jQuery 调用 VB.NET。你调用一个网络方法。您发送请求。然后 asp.net 知道如何调用特定的方法。但没有直接联系。除此之外,我知道BorrarAprobadorbtnBuscar_ClickMensaje 中可能会发生错误。另外,要么停止这个Integer.Parse(Id),要么声明这个ByVal Id As String——你的杰森被引用了。试试"{Id:" + id + "}"
  • 我尝试了 2 种方法,我得到了同样的错误。
  • 我个人不喜欢这样:`localhost:2091`。我喜欢创建虚拟目录。然后我只能调试网站/网络方法并通过 fiddler2 调用它。一旦我看到它有效,我就可以考虑我的 AJAX 是否有效

标签: jquery asp.net vb.net


【解决方案1】:

确保VB方法是Shared

Public Shared Function EliminarRegistro(ByVal Id As Integer) As String

还要确保使用 WebMethod 的类继承 System.Web.Services.WebService

Public Class Service1
    Inherits System.Web.Services.WebService
    <System.Web.Services.WebMethod(BufferResponse:=False)> _
    Public Function GetBigData() As DataSet
        'implementation code
    End Function
End Class

Reference

【讨论】:

  • 当我将公共共享函数 EliminarRegistro(ByVal Id As Integer) As String 我收到以下错误:“Me”仅在实例方法中有效。
  • y 试试看,我收到以下错误:如果没有类的显式实例,则无法从共享方法或共享成员初始化程序中引用类的实例成员。
  • 我使用这个: Dim vb As New Paginas_Mantenimiento_AprobadoresxModificacion Try If vb.BorrarAprobador(Integer.Parse(Id)) Then vb.btnBuscar_Click(Nothing, Nothing) Return "OK" Else vb.Mensaje("No se pudo borrar el registro") Return "BAD" End If Catch ex As Exception Return ex.Message End Try --- 我得到同样的错误
  • 我认为您无法从 WebMethod 访问 btnBuscar_ClickMensaje
  • 我尝试只返回链并给我同样的错误。只返回“OK”。
【解决方案2】:

我需要做的是向页面添加一个 ASP.Net AJAX ScriptManager 并将其 EnablePageMethods 属性设置为 true,如下所示

<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="400" EnableScriptGlobalization="True" EnablePageMethods="true">
        </asp:ScriptManager>

【讨论】: