【问题标题】:Nested ASP.Net web forms + nyromodal : Postbacks die after modal is closed嵌套的 ASP.Net 网络表单 + nyromodal:回发在模式关闭后消失
【发布时间】:2010-10-26 02:58:49
【问题描述】:

我有一个使用母版页模板的 ASP.Net 网页。

页面有一个带有一些基本 AJAX 功能的 UpdatePanel(更改 DropDownList 的值,UpdatePanel 将刷新)。这一切都很好。

我还有一个链接,弹出一个 nyromodal 模态,在模态内部,加载了另一个 ASP.Net Web 表单。因为我希望这个页面本身有自己的功能,而不仅仅是一个静态页面等。它准确地说是“创建新”对话。所以它会创建一条新记录,然后当它关闭时,您会返回主“记录列表”页面等。

我正在使用以下 jQuery 代码来启动 nyromodal 调用。此代码还包括各种其他调整和设置,以使 nyromodal 与 ASP.Net 更兼容,因为这是我在 nyromodal 和 ASP.Net 之间遇到并解决的第 5 次连续不兼容问题(课程:远离 ASP.Net)

$(document).ready(function(){
    $(function(){
      $('.modal').live('click', function(evt){
        $(this).nyroModalManual({'blocker':'#aspnetForm',minWidth:640,minHeight:400,endShowContent:function(elt, settings) { $('input:text:first', elt.content).focus(); }});
        evt.preventDefault();
      });
    });
});

此代码运行良好(感谢 Brian),因为它解决了 ASP.Net 和 nyromodal 协同工作的其他几个问题。它甚至使用了阻止器:#aspnetForm 位来阻止 nyromodal 超出名为 aspnetForm 的 ASP.Net 主要回发表单,该表单旨在解决almost identical problem

但是..

我正在加载到我的模式中的网页也是一个 .Net 网络表单。所以它当然也有自己的内置回发aspnetForm。所以当模态出现并且我使用 FireBug 检查 DOM 结构时,我现在实际上有两个 ASP.Net 表单(嵌套)。并且因为 nyromodal 本质上只是一个 div(或几个 div),所以表单标签本质上是嵌套的。

所以我认为这是把事情搞砸了。它实际上完全使 IE7 崩溃(致命异常)。 IE7 + FireFox:当我关闭对话框时,我的主 Web 表单将不再回发。我认为它被刚才的 2 个表单标签弄糊涂了。

能够使用 nyromodal 打开一个 ASP.Net Web 表单作为您的模态内容应该是一个非常简单的要求。我确实将其归咎于 ASP.Net,因为它如此蹩脚并在每个页面中都放置了一个强制性的“表单”标签。如果我使用的是 PHP,我今天就不会遇到任何这些问题,但我被困在使用 ASP.Bloat 来工作。

非常感谢任何想法或见解! :)

【问题讨论】:

  • 老实说,我不得不放弃在模式中加载另一个 Web 表单的想法,并且可能不得不将“模式页面”移动到原始父页面内的 div 中。然后让 nyromodal 显示 div 内容,这反过来又在逻辑等背后有自己的代码。有什么想法吗?

标签: jquery asp.net-ajax webforms nyromodal


【解决方案1】:

您是否考虑过将模式中的页面作为 iFrame 打开,以便其内容(新的表单标签等)不会干扰主机页面?

$(this).nyroModalManual({type:'iframe'});

【讨论】:

    【解决方案2】:

    我实际上是报告该问题的人。首先,您是否尝试过 jimbobmcgee(在您链接到的同一页面上)developed 的 ASP.NET nyroModal 插件?我还没有,因为我没有找到时间阅读所包含的文档。如果你这样做,请告诉我我是如何为你工作的。

    这实际上是一个完美的时机...我正在研究的另一种选择是在模式中使用普通的 HTML 页面而不是 WebForms。因此,我打算将我的服务器端代码包装在一个 web 服务中,并使用 jQuery 对其进行调用,并返回一个 JSON 响应。

    请原谅我的解释的准确性,因为我刚开始使用 web 服务和页面方法,所以我太学习了。因此,我要求某人发布一个简单的“Hello World”示例。

    希望能有所帮助。

    【讨论】:

    • 谢谢莎兰。是的,其实也不错。到目前为止,我已经使用过一次 .Net Web 服务方法,它似乎工作正常,但唯一的问题当然是一切都必须是静态的,所以你会丢失页面的状态等等。但对于一个典型的模态,希望它应该没问题。感谢您的联系和建议。我还没有使用过 .Net 插件。我可能会试一试.. 你是否使用 ASP.Net MVC?干杯
    • 是的,很遗憾。你关注 Dave WARd 的博客 - Encosia 吗?他很好地涵盖了这些主题。还没有开始使用 MVC ......虽然我看到了好处。在盲目进入之前需要了解MVC模式! :) 我的 2 个模态应用程序是显示信息(例如来自数据库)并通过 html 表单捕获数据。为此使用 jQuery Validation。还没有开始绑定网络服务。让我知道你的情况如何。也许我们可以互相帮助。干杯!
    • 会做莎兰,干杯。我看过那个博客并搜索了一些有用的东西。但一般我不会选择使用 ASP.Net,只是因为工作。我使用过许多其他网络平台,但不幸的是,我发现它最令人沮丧。大多数其他平台都更加直接,你可以直接进入引擎盖,对任何 JS/HTML/CSS 等做你需要做的事情,使用 .Net 做很多简单的事情会很臃肿和麻烦在 PHP 中花费我 2 分钟的任务 :( 但它目前支付了账单。
    • :D 是的,我和朋友争论哪个更好……PHP/ASP.NET……从来没有赢家!我认为这取决于程序员的偏好,并且在某种程度上,你正在创建的应用程序的类型。因为我也为 Windows Forms 和 Windows Mobile 开发,所以我觉得它很棒。但是 - 我确实看到了传统 ASP.NET 网络表单的缺点,我真的很期待学习 MVC - 没有视图状态、页面生命周期或 INmaingContainers ......就像你说的那样:“只要进入引擎盖,做你想做的事需要”。干杯!
    • 我刚刚破解并下载了 ASP.Net MVC :) 学习曲线将进一步延迟我的项目,这已经过期了,但希望我能赶上并从“好处”中节省时间: ) 干杯。
    【解决方案3】:

    如果你把它放在页面的头部。它允许 nyro modal 关闭来模拟回发。

    <script type="text/javascript">
    $(document).ready(function(){$.nyroModalSettings({
      modal: true,minWidth: ###,minHeight: ###,
      endRemove:function(){
       document.location='pageYouWantToRefresh.aspx';
      }    
    });});  
    </script>
    

    只需更改 document.location,它就会在窗口关闭时转到那里。

    【讨论】:

      【解决方案4】:

      到目前为止,我发现的最简单的解决方案是将弹出窗口加载为 iframe,而不是内联或通过 AJAX。只是一个想法。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2023-04-02
        • 2019-09-13
        • 2015-05-13
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        相关资源
        最近更新 更多