如何在 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")%> <%# 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")%> <%# 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 请求结果来控制客户端对象的可见性。
如何在 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")%> <%# 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")%> <%# 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 请求结果来控制客户端对象的可见性。