Javascript 未调用Web方法

Javascript 未调用Web方法,javascript,asp.net,vb.net,Javascript,Asp.net,Vb.net,我正在使用一个VB.Net页面,它从JavaScript调用一个web方法,这在一周前是有效的,但现在由于某种原因不起作用。我想知道是否有人能告诉我该去哪里找,因为我现在完全迷路了 首先,我的页面生成可单击的项目列表,执行此操作的行是: TicketHTML = TicketHTML + "<td><img src='../images/delete.png' Class='imgTicketClose' alt='Delete Task' onclick='DeleteT

我正在使用一个VB.Net页面,它从JavaScript调用一个web方法,这在一周前是有效的,但现在由于某种原因不起作用。我想知道是否有人能告诉我该去哪里找,因为我现在完全迷路了

首先,我的页面生成可单击的项目列表,执行此操作的行是:

 TicketHTML = TicketHTML + "<td><img src='../images/delete.png' Class='imgTicketClose'  alt='Delete Task' onclick='DeleteTicket(" + row("id").ToString() + ")' /></td></tr>"
我假设问题就在这里,因为web方法似乎从未调用,页面似乎也没有重新加载,但我不明白如果javascript显示确认对话框,为什么会失败

出于完整性的考虑,这里是我的web方法,尽管我知道由于我已经分析了数据库,所以没有调用它

 <System.Web.Services.WebMethod()>
   Public Shared Sub DeleteTask(ticketID As Integer)
  Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString())

  Dim cmd As New SqlCommand
  cmd.CommandType = CommandType.StoredProcedure
  cmd.CommandText = "spDeleteNonTicketItem"
  cmd.Parameters.AddWithValue("@ItemID", ticketID)

  cmd.Connection = conn

  conn.Open()

  cmd.ExecuteNonQuery()

  conn.Close()

   End Sub

公共共享子DeleteTask(ticketID为整数)
Dim conn作为新的SqlConnection(ConfigurationManager.ConnectionString(“蓝图”).ToString())
Dim cmd作为新的SqlCommand
cmd.CommandType=CommandType.storedProcess
cmd.CommandText=“spdeletonticketitem”
cmd.Parameters.AddWithValue(“@ItemID”,ticketID)
cmd.Connection=conn
康涅狄格州公开赛
cmd.ExecuteNonQuery()
康涅狄格州关闭
端接头
那我该去哪里找呢?如有任何建议,将不胜感激。谢谢

编辑:web.config文件中是否有任何内容阻止执行页面方法?
我刚刚注意到一个完全独立的web方法发生了这种情况,并用alert()检查了传递到javascript中的整数,它们都是有效的

编辑-我可以看到您添加了WebMethod属性

您可以做的一件事是向页面方法调用添加错误处理程序。通常可以为onsuccess和onError提供方法处理程序

例如,您可以添加以下javascript方法:

function OnFailed(error) {
   // Alert user to the error.
   alert(error.get_message());
}
然后,在PageMethods调用中:

    function DeleteTicket(ticketID)    
    {      
        var answer = confirm("Do you really want to delete this task?");      
        if (answer)       
        {         
            PageMethods.DeleteTask(ticketID, null, OnFailed);         
            window.location.reload();      
        }   
    } 
刚刚发现了一个StackOverflow问题。还要注意web.config中CustomError的影响

进一步编辑

你最近发布过吗

您需要确保:

1) 在页面的ScriptManager上,设置了EnablePageMethods=“true”

2) Web.config的相关部分应包含以下行:

<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" 
type="Microsoft.Web.Script.Services.ScriptHandlerFactory" 
validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
</system.web> 

编辑-我可以看到您添加了WebMethod属性

您可以做的一件事是向页面方法调用添加错误处理程序。通常可以为onsuccess和onError提供方法处理程序

例如,您可以添加以下javascript方法:

function OnFailed(error) {
   // Alert user to the error.
   alert(error.get_message());
}
然后,在PageMethods调用中:

    function DeleteTicket(ticketID)    
    {      
        var answer = confirm("Do you really want to delete this task?");      
        if (answer)       
        {         
            PageMethods.DeleteTask(ticketID, null, OnFailed);         
            window.location.reload();      
        }   
    } 
刚刚发现了一个StackOverflow问题。还要注意web.config中CustomError的影响

进一步编辑

你最近发布过吗

您需要确保:

1) 在页面的ScriptManager上,设置了EnablePageMethods=“true”

2) Web.config的相关部分应包含以下行:

<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" 
type="Microsoft.Web.Script.Services.ScriptHandlerFactory" 
validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
</system.web> 

您是否能够确认它正在尝试执行PageMethod,比如当您设置断点时,它是否正在命中它

我不知道这是否给您带来了问题,但我确实看到了:

function DeleteTicket(ticketID) 
 {
    var answer = confirm("Do you really want to delete this task?");
    if (answer) 
    {
       PageMethods.DeleteTask(ticketID);
       window.location.reload();
    }
 }

我想知道添加分号是否会给您带来问题。

您是否能够确认它正在尝试执行PageMethod,比如当您设置断点时,它是否正在命中它

我不知道这是否给您带来了问题,但我确实看到了:

function DeleteTicket(ticketID) 
 {
    var answer = confirm("Do you really want to delete this task?");
    if (answer) 
    {
       PageMethods.DeleteTask(ticketID);
       window.location.reload();
    }
 }


我想知道添加分号是否会给您带来问题。

您可以在javascript中执行VB函数吗?:O@Shvelo是的:D我以前有过这个功能,但不知道为什么它在C中不再有效了。你需要将你的方法标记为[WebMethod],不知道VBA。你可能想尝试在函数中设置一个断点,以确保它没有被调用。如果调用该函数,但在到达conn.Open()函数之前抛出异常,则观察数据库探查器不会告诉您任何信息。DeleteTask是否用该属性修饰?它需要能够从客户端“访问”。这个最近被删除了吗?另外,是否存在javascript错误?您可以在javascript中执行VB函数:O@Shvelo是的:D我以前有过这个功能,但不知道为什么它在C中不再有效了。你需要将你的方法标记为[WebMethod],不知道VBA。你可能想尝试在函数中设置一个断点,以确保它没有被调用。如果调用该函数,但在到达conn.Open()函数之前抛出异常,则观察数据库探查器不会告诉您任何信息。DeleteTask是否用该属性修饰?它需要能够从客户端“访问”。这个最近被删除了吗?还有,是否有任何javascript错误?刚刚看到缺少的javascript分号-很好。我敢打赌这是一枚闪亮的新镍币,这正是阻止JS函数按预期运行的原因。信不信由你,分号是可选的。但这并不意味着你不应该使用它们。请参阅好的调用,但很抱歉添加javascript分号没有帮助:(刚刚看到缺少的javascript分号-很好。我敢打赌这是一枚闪亮的新硬币,这正是阻止JS函数按预期运行的原因。信不信由你,分号是可选的。但并不意味着你不应该使用它们。请看好的调用,但很抱歉添加javascript分号没有帮助:(谢谢你的回答,WebMethod属性因为<>括号而被SO隐藏了。我现在已经把它添加到我的示例中,也没有任何错误。如果没有对很多值中的硬代码进行大量更改,我无法在本地调试,因此很难正确调试此项目,但我非常确定它不会影响到该方法。)检查传入的整数是否有效,我还看到另一个web方法出现这种情况,两个方法都在一周左右前工作,所以我想知道web.config中是否缺少允许这些方法工作的内容?谢谢dash。是脚本管理器,我的老板做了一些优化,并为脚本添加了一个母版页我正在处理的e部分,他已经删除了