繁体   English   中英

如何在数据列表中调用按钮的asp回发?

[英]how do I call the asp postback of button inside datalist?

我怎样才能获得一个ASP按钮的JavaScript回发事件调用?

    <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等待响应。

没必要那样做。 只需返回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”部分并不完全正确,但是带有承诺的部分应该可以帮助您。

我能够通过以下方式调用回发:

<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>

我必须添加一个linkbutton来生成__doPostBack ,但不确定为什么单独的ASP:Button不会触发该事件。 我仍然无法使用Page.ClientScript.GetPostBackEventReferenceonClientClick功能。

最后说明,您需要使用sourceButton.name而不是sourceButton.id调用__doPostBack来触发正确的服务器端事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM