2014-10-28 49 views
0

我怎样才能到一个asp按钮的JavaScript回发事件调用?如何调用datalist中的按钮的asp回发?

<ItemTemplate> 
     <asp:Button id="btnTest" runat="server" 
        Text="button" OnClientClick=" 
      customAsyncConfirmDialog(function (isconfirmed) 
      { 
       if(isconfirmed) 
       { 
        //call this buttons postback event 
        <%# Page.ClientScript.GetPostBackEventReference(new PostBackOptions(Container.FindControl("btnTest")))%>; 
       } 
      });return false; 
      "/> 
    </ItemTemplate> 
</asp:DataList> 

更新:customAsyncConfirmDialog是一个异步函数,它不阻止JavaScript等待响应。

回答

0

我能得到它的调用与下面的回传:

<script type="text/javascript"> 
    function customConfirmDialog(sourceButton, callback) { 
     setTimeout(function() { callback(sourceButton, true); }, 1); 
     return false; 
    } 
</script> 

<asp:DataList ID="dlTest" runat="server"> 
    <ItemTemplate> 
     <%# Page.ClientScript.GetPostBackEventReference(new PostBackOptions(Container.FindControl("btnTest")))%>; 
     <asp:LinkButton runat="server" ID="neededfor__dopostbackgenerationforsomereason"></asp:LinkButton> 
     <asp:Button id="btnTest" runat="server" 
        Text="button" 
      OnClick="btnTest_OnClick" 
        OnClientClick=" 
       return customConfirmDialog(this,function (sourceButton, isconfirmed) 
       { 
        if(isconfirmed) 
        { 
         //call this button's postback event 
         __doPostBack(sourceButton.name,''); 
        } 
       }); 
      "/> 
    </ItemTemplate> 
</asp:DataList> 

我不得不添加一个LinkBut​​ton获得__doPostBack产生,不知道为什么ASP:按钮本身并不触发。在onClientClick函数中,我仍然无法使用Page.ClientScript.GetPostBackEventReference

最后说明,您需要拨打__doPostBacksourceButton.name而不是sourceButton.id触发正确的服务器端事件。

1

没有必要这样做。只要返回true,回发处理程序将被击中。例如:

<ItemTemplate> 
    <asp:Button id="btnTest" runat="server" 
       Text="button" OnClientClick=" 
     customConfirmDialog(function (isconfirmed) 
     { 
      return isconfirmed;     
     }); 
     "/> 
</ItemTemplate> 

我无法访问我之前编写的内容,但下面是一个基于您在其他答案中编写的内容的快速示例。您可能需要改变一些事情,但你应该得到的想法:

window.confirm = function(question, ok, cancel) { 
    var defer = $.Deferred(); 
    ok = ok || 'OK'; //setup text for the confirmation 
    cancel = cancel || 'Cancel'; 

    $(document).ready(function() { 

     $('#customMessage').text(question); 
     var btnOk = $('#btnCustomOK'); 
     var btnCancel = $('#btnCustomCancel'); 
     btnOk.val(ok); 
     btnCancel.val(cancel); 

     btnOk.unbind("click"); //prevents chaining of events if multiple confirms are used 
     btnCancel.unbind("click"); 
     btnOk.click(function() { 
      $('#MyConfirm').hide(); 
      defer.resolve(true); //gets passed as isconfirmed=true 
      return false; //prevent postback 
     }); 

     btnCancel.click(function() { 
      $('#MyConfirm').hide(); 
      defer.resolve(false); 
      return false; //prevents postback 
     });   

     $('#MyConfirm').show();     
     btnOk.focus(); 
    }); 
    return defer.promise(); 
} 

然后使用:

<asp:Button id="btnTest" runat="server" Text="button" 
    OnClientClick="confirm('My Message blah blah').then(//this runs after ok/cancel is clicked, thanks to defer.resolve() and defer.promise(). 
function(isConfirmed) { 
if (isConfirmed) 
__doPostBack(source.id,''); 
}); return false;//return false here to prevent the initial postback from occurring"/> 
    </ItemTemplate> 

的“source.id”部分是不完全正确的,但有一部分承诺应该帮助你。

+0

是的,这个工作,除了customConfirmDialog是异步的,更新的问题 – SumGuy 2014-10-28 20:17:16

+0

所以你会想要承诺。为了达到这个目的,我实际上实施了一些非常类似的事情。覆盖window.confirm定制确认,绑定处理回发的承诺。想让我发表一个例子吗? – basher 2014-10-28 20:20:00

+0

是的请,那么我就不必处理获取回拨电话 – SumGuy 2014-10-28 20:28:24

相关问题