2012-04-02 51 views
0

我们有几个相当大的ASP.NET Web项目,我们已经被要求在一个选项卡式界面下进行组合。因此,例如,当您单击标签1时,我们会在下面显示项目A.然后,如果您单击选项卡2,我们将显示项目B.我将下面的每个项目称为“应用程序”,因为它们为我们的用户执行不同的功能。选项卡式应用程序中的多个.NET应用程序

有没有人有一个很好的方法来做到这一点?这里的一个关键问题是每个应用都必须记住状态。因此,如果用户在App A/Tab 1上填写Web表单的一半,然后他们点击另一个标签做一些工作,当他们回到应用程序A /标签1时,他们应该看到他们的半完成表单(尚未保存到数据库)。

我们讨论了几种选择:iframe可能是一种可能性,但我们害怕对这些做出承诺,因为它们可能会失宠并且可能会调整大小和打印问题。我们不认为我们可以简单地将每个应用嵌入到a中,并且在标签之间单击时隐藏/显示它,因为如果打开了很多标签页,页面的大小会变得非常大,并且在.NET中会出现问题应用程序/页面触发回传(我们的许多应用程序使用传统的.net回发)。

在某些方面,我们基本上被要求编写一个浏览器,在每个选项卡中都有一个.net应用程序。我们实际上不能使用浏览器来执行此操作,因为我们无法强制浏览器打开新的选项卡(而不是单独的窗口)。

有没有人有任何想法如何“包装”多个.NET应用程序到一个选项卡式的用户界面?或者这是不可能的?或者注销iframe解决方案是错误的?每个.net项目都可以在不可见时简单隐藏的iframe中呈现。

谢谢。

+0

哪种技术? Winform/wpf? – 2012-04-02 15:05:46

+0

将带有选项卡控件和WebBrowser控件的winforms应用程序工作吗? – 2012-04-02 15:09:33

+0

这些是ASP.NET webform项目。每个执行一个特定的功能,这就是为什么我称为一个应用程序。这是针对金融公司的,所以一个“应用程序”可能提供交易信息,另一个可能提供股票市场研究。所有执行.NET页面回发。 – user1308260 2012-04-02 15:15:44

回答

0

我开发了一个自定义MVC框架的项目。在选项卡内部,每个选项卡(应用程序)都有一个控制器。数据将使用视图状态或每个应用程序使用的模型持久保存在共享视图中。

+0

你能给我一些更详细的信息吗?在离开之前,你如何获取每个页面的状态(以便稍后再显示)? – user1308260 2012-04-02 15:24:08

+0

@ user1308260在标签页面上工作时,您并未真正离开,而只是更改可见的控件。你似乎离开用户端,但你仍然在同一个表单中。唯一一次改变你的用户生气将会失去,当refresh()/ reload()方法被调用,当然当关闭表单时。这是因为所有的控件都必须使用数据源是模型的bindingSource。该模型在从控制器刷新期间获取,在保存之前不会影响数据库。 – 2012-04-02 18:44:21

+0

@ user1308260该视图将只包含一个新的控制器实例,绑定源,模型和您的控件。所有的逻辑都在控制器中。 – 2012-04-02 18:45:57

0

一个可能的解决办法是:

  • 修改现有的WPF/WinForms的应用程序,以便在主窗口包含 只是一个用户控件。所有的应用程序逻辑应该是包含在用户控件中的 或者包含在用户控件中的元素。
  • 创建一个包含对其他应用程序的程序集引用的“shell”应用程序。
  • 将用作“主”屏幕的用户控件放入选项卡中。您可以使用WindowsFormsHost将Windows窗体控件托管在WPF应用程序中(反之亦然,使用ElementHost)。

问题仍然是必须保持状态的对话框,这可能会在更改选项卡时出现问题。

+0

对不起,我应该在我最初的帖子中澄清说这些是.NET webform项目(不是赢得应用程序)。 – user1308260 2012-04-02 15:20:54

+0

这是根据OP基于Web的应用程序,他是在谈论I帧和浏览器 – 2012-04-02 15:21:00

0

选项1 为“选项卡”创建一个自定义服务器控件,并在您要用选项卡导航到的每个应用程序中引用它。您将完全控制每个应用程序中的“单击”事件选项卡,以便您可以保存状态。如果需要将每个应用程序或部署为同一网站上的虚拟目录,则每个应用程序都可以是自己的网站。

我可能会从代码中拉出标签配置,并将其放入配置文件或数据库中,以便您可以从标签UI添加和减去应用程序,而无需重新编译和重新部署选项卡控件。

选项2 创建一个“母版页”,然后让页面中的javascript隐藏并显示其中的每个应用程序的iframe。您可以使用JavaScript来确保iframe始终最大化为内容大小。使用iframe,您不必担心状态,因为它们全都会在浏览器中同时显示。

可能的问题:

  1. 超时,如果应用程序是隐藏的,没有得到输入,将它超时?
  2. 跨域脚本,如果他们不都在同一个域
  3. 打印效果可能取决于你如何想需要自定义编码的解决方案它看起来
+0

所以你说,当用户点击选项卡中,每个应用程序将不得不拯救它自己的状态呢?难道要保存一半输入的表格 - 每个表格都有不同的属性/字段?或者有什么办法一般保存任何网页表单的全部内容?谢谢你的想法。 – user1308260 2012-04-02 15:49:57

+0

我认为你已经控制了应用程序代码。我没有看到如何在没有这种控制的情况下维护应用程序状态。 – DancesWithBamboo 2012-04-02 15:58:21

+0

虽然我宁愿不必重写代码,但我确实可以控制它。你能告诉我一个应用程序如何保存状态,当这个状态在许多不同的Web表单上有所不同时?例如,一个页面可能会根据下拉选项在其上过滤数据。另一个页面可能更多是一个典型的带有输入框/框的Web表单来填充文本数据。每个人都不需要“硬编码”来保存离开前输入的数据吗?如果是这样,那么这不是一个巨大的任务吗?也许你说这就是我必须做的。再次感谢。 – user1308260 2012-04-02 17:45:22

相关问题