【问题标题】:It's posible call vb.net codebehind method from ajax jquery?可以从 ajax jquery 调用 vb.net 代码后面的方法吗?
【发布时间】:2015-05-18 00:51:22
【问题描述】:

我尝试从 aspx 上的 ajax jquery 函数调用代码隐藏函数,但我收到了消息 500(内部服务器错误。) 如果我检查 IE 上的 Web 开发人员工具,我发现了消息 No se puede encontrar el Tipo 'Acme.SubAcme.ConvertMeTypeConverter'

这是我在 visorMapa.aspx 上的 Js 函数

function getMarkersMap(indicador) {
        getFiltros()
        console.log("indicador: " + indicador + ", flota: " + flota + ", t.Unidad: " + tUni + ",marca: " + marca)
        $.ajax({
            type: 'POST',
            url: 'visorMapa.aspx/getMarkers',
            data: "{}",
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function(msg) {
                console.log("good Job");
            },
            error: function(data) {
                console.log("something is wrong!");
            }
        });
    }

这是代码隐藏的功能

<System.Web.Services.WebMethod()> _
Public Shared Function getMarkers() As String
    Return "It's Ok"
End Function

我在 web.config 上阅读了一些关于 jsonSerialization 的未注释行,这些行在我的 web.config 中未注释。 我想知道是否可以在 ajax 的代码隐藏上调用 web 方法。 我正在考虑制作网络服务或部分课程,我从不制作部分课程,但我想知道是否可以选择。 我对其他选择持开放态度。
我需要的是从 vb.net 的 db 中获取带有数据的 json 对象并在 javascript 上进行处理。
我正在使用 vb.net 2008
今天做新的测试人员。 我在一个新的 vb.net 解决方案上做了一个 WS 示例,并从 Js 调用默认的 WS 函数(hello world)并且工作正常。然后我在我的 vb 解决方案上做同样的事情并且不起作用。问题不在于 Js 函数或 WS。还要在浏览器上测试 WS 并运行。
我认为这可能是 web.config 或其他东西。我还能做哪些其他测试?

【问题讨论】:

  • 你能翻译一下你的错误吗?
  • 使用 asmx (web service) 是首选方式之一;除了之前的评论,你能翻译一下错误吗
  • 错误说:找不到类型'Acme.SubAcme.ConvertMeTypeConverter' @Mairaj Ahmad

标签: jquery asp.net ajax vb.net


【解决方案1】:

转到“App_Start”文件夹下的“RouteConfig.vb”。

更改以下行

settings.AutoRedirectMode = RedirectMode.Permanent

settings.AutoRedirectMode = RedirectMode.Off

请参考:http://forums.asp.net/t/1975897.aspx?jquery+ajax+calls+to+asp+net+web+methods+authentication+error+

【讨论】:

  • 嗨,我这样做了,我得到了同样的结果。我认为问题在于 Js 调用中的配置或标头,因为我在新解决方案中创建了一个新的 WS,并使用相同的函数调用它并且工作正常。但是,如果我尝试在我的解决方案中做同样的事情是行不通的
  • 是的,我发现jquery调用没有任何问题。我实现了你的代码并让它工作。我已经更新了我的答案。
【解决方案2】:

我想分享一个我找到的可选解决方案。我认为问题在于 IIS 中的应用程序组。对于这个特定的项目,我使用 Classic .Net AppPool Version Net CLR: 2.0。 我发现的解决方案是不使用 WS 并使用 AJAX 库。
1.-在加载事件vb.net时添加AJAX对象(visorMapa_VisorMapa是vb.net定义的我的部​​分类的名称)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
             Ajax.Utility.RegisterTypeForAjax(GetType(visorMapa_VisorMapa))
             'more code on load page event...
End Sub

2.- 在我的 vb.net 函数顶部添加这一行

 <Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.ReadWrite)> _
Public Function getMarkerMap(ByVal accion As Integer, Optional ByVal flota As Integer = -1) As String
'some code here and return JSON....
 result = JsonConvert.SerializeObject(dt)
 Return result
End Function

3.- 像这样从 Js 中调用它

//JS Function
function getMarkersMap(indicador) {
    getFiltros();
    visorMapa_VisorMapa.getMarkerMap(indicador, flota, getMarkers_CallBack);
}
//the callback
function getMarkers_CallBack(data) {
    clearMarkers();
    markers = JSON.parse(data.value);
    //console.log(markers[0].poslat);
    for (var i = 0; i < markers.length; i++) {
        var mylatLng = new google.maps.LatLng(markers[i].poslat, markers[i].poslon);
        console.log(markers[i].poslat + ", " + markers[i].poslon);
    }

通过这种方式,我可以从 JavaScript 调用代码隐藏函数并获取我可以在 Js 上处理它的 JSON 对象。
我感谢您的帮助。也许这不是最好的解决方案,但在这种情况下,它可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多