在jQuery UI对话框中进行回发

时间:2016-07-14 11:35:27

标签: jquery asp.net jquery-ui-dialog

许多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'事件)。虽然对话框弹出很好,但它不会进行回发。所有帮助表示赞赏!

2 个答案:

答案 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的,但我可以看到它也适用于其他情况。希望这可以帮助某人。