我正在使用一个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()并且它们都是有效的
答案 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>