Web方法没有被调用

时间:2011-12-14 14:33:04

标签: javascript asp.net vb.net

我正在使用一个VB.Net页面,它从JavaScript调用一个Web方法,这个工作在一周前工作,现在由于某种原因无效。我想知道是否有人能给我任何想法,因为我现在完全迷失了。

首先,我的页面会生成一个可以点击的项目列表。执行此操作的行是:

 TicketHTML = TicketHTML + "<td><img src='../images/delete.png' Class='imgTicketClose'  alt='Delete Task' onclick='DeleteTicket(" + row("id").ToString() + ")' /></td></tr>"

我知道这个工作就像点击项目时我得到一个javascript弹出窗口,所以我认为问题不在这里。

现在我的Javascript:

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

我认为问题就在这里,因为Web方法似乎永远不会调用,并且页面似乎也没有重新加载,但我不明白为什么如果javascript显示确认对话框,这将失败。

为了完整性,这里是我的网络方法,虽然我知道这不会被调用,因为我已经对数据库进行了分析。

 <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

那我在哪里看?任何建议将不胜感激。感谢

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

2 个答案:

答案 0 :(得分:2)

你是否能够确认它是否正在尝试执行PageMethod,就像你设置一个断点那样它会击中它?

我不知道这是否会给你带来麻烦,但我确实看到了这一点:

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

我想知道添加分号是否会导致问题。

答案 1 :(得分:1)

编辑 - 我可以看到你添加了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();      
        }   
    } 

刚刚找到一个带有example of this的StackOverflow问题。另请注意CustomError在web.config中的效果。

进一步编辑。

你最近发布了一个版本吗?

您需要确保:

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>