[英]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.GetPostBackEventReference
中onClientClick
功能。
最后說明,您需要使用sourceButton.name
而不是sourceButton.id
調用__doPostBack
來觸發正確的服務器端事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.