许多SO用户已经提出过这个问题并且也有解决方案。但他们都没有为我工作。
在aspx中
<asp:Button ID="btnConfirm" ClientIDMode="Static" runat="server" Text="Confirm" OnClick="btnConfirm_Click"/>
<script type="text/javascript">
$(function inPageLoad() {
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function () {
//Confirmation Dialog
$(document).on('click', '#btnConfirm', function (e) {
e.preventDefault();
$('<div></div>').appendTo('body')
.html('<div><h6>Yes or No?</h6></div>')
.dialog({
modal: true, title: 'message', zIndex: 10000, autoOpen: true,
width: 'auto', resizable: false,
buttons: {
Yes: function () {
$(this).dialog("close");
__doPostBack('btnConfirm','');
},
No: function () {
$(this).dialog("close");
}
},
close: function (event, ui) {
$(this).remove();
}
});
});
});
});
$(document).ready(inPageLoad);
</script>
在aspx.cs中
protected void btnConfirm_Click(object sender, EventArgs e)
{
SomeFunction();
}
如果点击“是”,我想进行回发(在代码隐藏中转到'btnConfirm_Click'事件)。虽然对话框弹出很好,但它不会进行回发。所有帮助表示赞赏!
答案 0 :(得分:1)
而不是__doPostBack('btnConfirm','')
;
Yes: function () {
$("[id*=btnConfirm]").click();
},
更新我的答案
选择另一个按钮,显示无属性并触发该按钮 按钮
css
.hidden
{
display:none;
}
ASPX
<asp:Button id="btnhidden" runat="server" onclick="btnhidden();" cssClass=hidden/>
的javascript
Yes: function () {
$("[id*=btnhidden]").click();
},
答案 1 :(得分:0)
上述解决方案不适用于我的情况,因此我想给人们一个替代方案,以防他们最终遇到与我相同的情况-以下对我有用:
我想引发的事件是通过在中继器中单击按钮而产生的-因此,这使我的情况与众不同。以下是我最终使用的标记:
<asp:Button runat="server" ID="btnPersonRemove" Style="width: 15px" Text="Remove" OnClientClick="return confirmation(this);" UseSubmitBehavior="false" OnClick="btnRemove_Click" />
使用此面板(在转发器之外):
<asp:Panel ID="pnlConfirmationMessage" runat="server" Style="display: none" CssClass="confirmation">
<asp:HiddenField ID="hdnPersonID" runat="server" />
<asp:Label ID="lblConfirm" runat="server">Are you sure you'd like to remove this member?</asp:Label>
</asp:Panel>
请注意,我正在将this
传递给JS,并从confirmation
方法返回结果。您将在下面看到,通过传递this
,我可以使用JS .name
属性从单击的控件中检索唯一ID。
<script type="text/javascript">
$(function () {
$("#<%= pnlConfirmationMessage.ClientID %>").dialog({
autoOpen: false,
modal: true,
resizable: false,
draggable: false
});
});
function confirmation(control) {
$("#<%= pnlConfirmationMessage.ClientID %>").dialog('option', 'buttons', {
'Confirm': function () {
$(this).dialog('close');
return evaluate(true, control);
},
'Cancel': function () {
$(this).dialog('close');
return evaluate(false, control);
}
});
$("#<%= pnlConfirmationMessage.ClientID %>").dialog('open');
}
function evaluate(value, control) {
if (value) {
__doPostBack(control.name, '');
}
}
</script>
请注意,在实际引发事件之前,我们不会将按钮绑定到jQuery对话框。这将延迟实际发生的回发,直到用户与对话框进行交互为止。
如果他们在jQuery UI对话框中单击“确认”,我们将调用evaluate(value)
方法并将true
传递给它;如果他们单击“取消”,我们将通过false
。
__doPostBack(id, eventArg)
是通过附加来自control.name
的按钮单击事件来发起回发的方法。
尽管这是来自Repeater的,但我可以看到它也适用于其他情况。希望这可以帮助某人。