背景:

我在 ASP.NET 2.0 上的 jquery 1.3.2 上使用 jquery blockui 2.31。

我使用该对话框来显示(通常)隐藏的 DIV 作为弹出模式对话框,其中包含 ASP.NET 服务器端控件(为简单起见,使用 asp:Button)。没有 AJAX,或者不保证有。

jquery blockui 所做的事情之一是,如果您向它传递一些 html 元素,它会将控件从页面中的位置删除,并将其附加到 身体.

ASP.NET 2.0 似乎希望回发的控件位于 形式 您可以使用 $(#aspnetForm) 找到。jquery blockui 只是将它们移至 身体, ,所以回发 从不开火.

该方法是一个实例方法,可能无法作为静态方法正常工作(在用户和页面控件中记录的引用......)

我做了一些挖掘:

我修改了 jquery blockui 以附加到表单(并与选择器斗争以删除块),但它对 IE6 和 IE7 不起作用 - 覆盖层从表单开始,整个对话框看起来偏离中心。隐藏覆盖层不是一个选项,我真的很讨厌弄乱 IE 特定的 css 和 IE 特定的脚本。

我尝试将一些图层附加到正文,将一些图层附加到表单,但正文图层始终显示在表单图层的顶部(因此阻止输入的不透明层也会阻止我尝试显示的 div 上的输入)。

我认为解决方案是让 div 调用隐藏的虚拟锚点来执行原始按钮的回发。 松泰克 他在回答相关问题时提出了这一点。

我的实际问题:

我的假回发技巧是否走在正确的轨道上?我想如果我依赖 jquery 来实现模式对话框功能,我不应该担心回退。

或者,我应该继续考虑表单添加的样式吗?

有帮助吗?

解决方案

如果您想要正常的 ASP.NET 行为(例如触发事件),那么您几乎必须将标签放回表单标签中。

话虽这么说,如果您坚持使用 jQuery 模式,我不认为触发回发是一件坏事。正如您在链接/相关问题中提到的,您可以获得回发参考 GetPostBackEventReference 在您的代码隐藏中并传入您想要触发的事件的控件,例如:

//assuming your button is btnMyButton and
Page.ClientScript.GetPostBackEventReference(btnMyButton, null);

您可以将此 javascript 调用附加到任何其他按钮,包括您在表单标记之外移动的按钮。这实际上将连接回发并像往常一样引发该控件的事件。

这不是最优雅的解决方案,但我认为如果您需要使用 jQuery 模式,您就走在正确的轨道上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top