2012-02-29 14 views
0

我使用webmethod来识别用户是否可以“删除记录”。通过在JavaScript中使用异步webmethod返回值来触发/阻止页面事件

这是添加此访问控制之前的JavaScript代码。

$(".apply-delete-msg").live('click', function() { 
    return confirm("Are you sure you want to delete this item(s)?);  
}); 

现在,它会调用将WebMethod验证访问

<WebMethod(EnableSession:=True)> _ 
Public Function CanAccess() As Boolean 
    Return ServerCode.IsAccessable 
End Function 

新的JavaScript则:

$(".delete-msg").live('click', function() {  

    MPWebService.CanAccess(
     //B 
     function(boolRes) {  

      if (boolRes == true){ 
       return confirm("Are you sure you want to delete this item(s)?");}    
      else{ 
       alter("can't access"); 
       return false; 
      }   

    }); 

    // **Here is Comment A**: Return true/false 

}); 

我希望 “.Live” 方法返回一个真/假如果用户可以访问并确认删除/不能访问或取消删除。

但是如果我右边的方法将调用CanAccess第一,然后注释甲:,终于评论乙,即函数(boolRes)

因为boolRes的值在函数内部(boolRes)并且最终被处理,所以对于我来说从评论A位置得到这个方法的返回值是非常棘手的。

有什么建议吗?

回答

1

Web服务调用是异步的,并将在您从单击消息返回后返回结果。因此,您始终需要从click方法返回false并重新设计页面,以便在Web服务方法返回后执行客户端单击(并返回true)后通常会执行的操作。在等待呼叫完成的同时收到“Please wait ...”消息也是很好的做法。

+0

有意义。但是如果click事件总是返回false,它是如何激发服务中的删除功能的。在JS中调用服务器端事件? – 2012-02-29 12:38:10

+0

你能举个简单的例子吗? – 2012-02-29 12:47:41

+0

您是否有与.delete-msg点击相关的回传操作?您可能拥有并且这是您要在Web方法调用后启动的操作。返回false将保证不会从点击事件处理程序调用回发。你可以使用doPostBack来回传(参见这个问题,例如:http://stackoverflow.com/questions/2738327/how-to-call-postback-using-javascript-on-asp-net-form) – kgiannakakis 2012-02-29 13:24:02

0

有两种方法可以做到这一点:

  • 做注释A码到boolRes ==真块
  • 创建一个包含注释A的代码的回调,并调用这个回调在boolRes == true block
相关问题