如何在 asp:Button OnCommand 事件发生后保持 fancybox 打开?

How do I keep a fancybox open after the asp:Button OnCommand event has occurred?

如何在 asp:Button OnCommand 事件发生后让 fancybox 保持打开状态?在确定是否存在错误后,我还需要与 fancybox 进行通信。 我的 fancybox 打开事件:

    <script language="JavaScript" type="text/javascript">
 function CreateBox(id) {
    $(document).ready(function () {
        $("#lnk" + id).fancybox({
            autoSize: false,
            modal: true,
            width: 400,
            height: 'auto',
            helpers: {
                overlay: { closeClick: false }
            }
        });
    });
 }

html 事件:

 `<a href='#ChgMemType<%# DataBinder.Eval(Container, "DataItem.ID") %>'  onclick='CreateBox(<%# DataBinder.Eval(Container, "DataItem.ID") %>);' id='lnk<%# DataBinder.Eval(Container, "DataItem.ID") %>' >Change Membership</a>

        <div id='ChgMemType<%# DataBinder.Eval(Container, "DataItem.ID") %>' style="display: none; width:400px; text-align: left">
                <h3>Change Membership Type for <%# DataBinder.Eval(Container, "DataItem.FirstName")%>&nbsp;<%# DataBinder.Eval(Container, "DataItem.LastName")%></h3>
                <p>Please select the membership type below:</p>
                <input id='hfChangedMemberType' value="<%# DataBinder.Eval(Container, "DataItem.ID") %>" type="hidden" />

                <div id="RadioDiv">
                    <input id="rdAnnual" type="radio" onclick="SetAnnual();"  runat="server" value="Annual" />
                    <asp:Label ID="lblAnnualPrice" runat="server" Text="Label"></asp:Label><br />
                    <input id="rdLife" onclick="SetLife();" runat="server" type="radio" />
                    <asp:Label ID="lblLifePrice" runat="server" Text="Label"></asp:Label><br />
                </div><br />
                    <h3><div id="hiddenerror" style="color:red; display:none;">Error updating membership type for <%# DataBinder.Eval(Container, "DataItem.FirstName")%>&nbsp;<%# DataBinder.Eval(Container, "DataItem.LastName")%></div></h3><br />
                 <asp:LinkButton ID="lbSetMemType" CommandArgument='<%# DataBinder.Eval(Container, "DataItem.RequestID") %>' OnCommand="lbSetMemType_Command" CssClass="button" runat="server">Save</asp:LinkButton>
                </div><br />

                     <asp:LinkButton ID="lbSetMemType" CommandArgument='<%# DataBinder.Eval(Container, "DataItem.RequestID") %>' OnCommand="lbSetMemType_Command" CssClass="button" runat="server">Save</asp:LinkButton>

我需要在后面的代码中切换 fancybox 中错误消息的显示,或者如果没有错误发生则关闭 fancybox。

如果您正在使用 Fancybox,那么您也在使用 jQuery,那么您可能应该考虑通过 jQuery 使用 $.ajax()$.post(),而不是进行完整的 post整页的背面。

通过使用服务器控件<asp:Button ID="button1" runat="server"/>,页面自动执行post返回以处理服务器端的事件。并且尝试通过服务器端代码控制客户端状态(Fancybox 内容和状态)肯定会很快变得混乱。

如果您切换到使用客户端控件 <button id="button1" onclick="handle_button_click()"/>,您可以对一个特殊的 asp 页面执行简单的 post,该页面仅处理更新表单数据和返回状态代码和 JSON 格式的消息或仅打印纯字符串。 $.post() 有一个名为 success 的参数,它接受一个在 post 响应 returns 时调用的函数。通过这个功能,您可以轻松更新 Fancybox 表单的内容,而无需重新加载整个页面。祝你好运:)

另一种选择是在 Fancybox 的 iframe 中显示单独的 asp 页面。应该和上面的基本一样。

我认为您应该查看 ASP.NET 的客户端框架,至少使用 ASP.NET AJAX:UpdatePanel 对象使您能够仅选择性地更新您页面的某些部分,并使用方法 Sys.WebForms.PageRequestManager.getInstance().add_endRequest 您可以添加一个 JavaScript 客户端处理程序,该处理程序在每个向服务器的 AJAX 请求结束时调用。

通过这种方式,您肯定可以根据对页面的 HTTP 请求结果来控制客户端对象的可见性。