首页 > 语言 > 关键词  > ASP.NET最新资讯  > 正文

ASP.NET中使用IFRAME建立类Modal窗口

2008-09-11 11:10 · 稿源:互联网

我们经常要在程序的人机交互中用到模态窗口,但在B/S开发中,这一切变得不容易了,虽然也可以用window.showModalDialog函数实现(见https://dotnet.aspx.cc/ShowDetail.aspx?id=49ML4AO8-5PB3-4KNY-NJZD-LJOIOXV4M1X4),但多数用起来麻烦,还要为了回传值用Frameset建立2个无用的窗口。不爽!

我发现可以尝试在初始页面中嵌入一个IFRAME,然后用IFRAME来显示一个页面,并将IFRAME设定为按绝对位置摆放,Z-Index设置为最高的9999,这样就可以将这个页面覆盖在初始界面上,当需要显示模态窗口时,就显示这个IFRAME,可以将IFRAME的尺寸扩大到能覆盖住初始窗口,也可以盖住关键项,目的就是不让后面的窗口有什么变化的可能。在IFRAME显示的窗口需要关闭时只要对它的parent的IFRAME隐藏就可以了。实际试验时发现IFRAME的diaplay不能在子窗口被改变,所以,我们还需要将IFRAME放到一个DIV中,控制DIV的显示就可以控制窗口的出现或隐藏。但为什么不直接用DIV来显示窗口呢,原因有两个:1.DIV不能遮挡它后面的Dropdownlist控件,而IFRAME能。2.不容易将窗口内的内容放置到一个单独的网页中,复用性差。

以下是代码,显示隐藏使用了客户端和服务端代码两种写法:

WebForm1.aspx

<%@Pagelanguage="c#"Codebehind="WebForm1.aspx.cs"AutoEventWireup="false"Inherits="WSGUI1.WebForm1"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<metaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1">
<metaname="CODE_LANGUAGE"Content="C#">
<metaname="vs_defaultClientScript"content="JavaScript">
<metaname="vs_targetSchema"content="https://schemas.microsoft.com/intellisense/ie5">
<scriptlanguage="javascript">
functionShowLayer()
{
document.all.MyFormLayer.style.display='';
returnfalse;
}
functionSetURL(url)
{
document.all.IFRAME1.src=url;
}
</script>
</HEAD>
<bodyMS_POSITIONING="GridLayout">
<formid="Form1"method="post"runat="server">
<FONTface="宋体">
<asp:DropDownListid="DropDownList1"style="Z-INDEX:101;LEFT:40px;POSITION:absolute;TOP:208px"
runat="server"Width="184px">
<asp:ListItemValue="TEST1">q</asp:ListItem>
<asp:ListItemValue="TEST2">w</asp:ListItem>
<asp:ListItemValue="TEST3">e</asp:ListItem>
<asp:ListItemValue="TEST4">r</asp:ListItem>
</asp:DropDownList></FONT><inputtype="button"name="MyButton"value="TEST"id="MyButton"onclick="ShowLayer();SetURL('WebForm2.aspx')"style="Z-INDEX:102;LEFT:360px;POSITION:absolute;TOP:336px">
<divid="MyFormLayer"style="DISPLAY:none;Z-INDEX:103;LEFT:16px;WIDTH:408px;POSITION:absolute;TOP:24px;HEIGHT:304px">
<iframescrolling="no"frameborder="0"width="100%"height="100%"id="IFRAME1"runat="server">
</iframe>
</div>
<asp:Buttonid="Button2"style="Z-INDEX:104;LEFT:256px;POSITION:absolute;TOP:336px"runat="server"
Text="ASPXTest"></asp:Button>
</form>
</body>
</HTML>

WebForm1.aspx.cs

....

publicclassWebForm1:System.Web.UI.Page
{
protectedSystem.Web.UI.WebControls.DropDownListDropDownList1;
protectedSystem.Web.UI.HtmlControls.HtmlGenericControlIFRAME1;
protectedSystem.Web.UI.WebControls.ButtonButton2;

privatevoidPage_Load(objectsender,System.EventArgse)
{
//在此处放置用户代码以初始化页面
if(!IsPostBack)
{

}
}
publicstaticvoidCreateScript(System.Web.UI.Pagemypage,stringstrScript,stringID)
{
stringstrscript="<scriptlanguage='javascript'>";
strscript+=strScript;
strscript+="</script>";
if(!mypage.IsStartupScriptRegistered(ID))
mypage.RegisterStartupScript(ID,strscript);
}
privatevoidButton2_Click(objectsender,System.EventArgse)
{
IFRAME1.Attributes.Add("src","WebForm2.aspx?NAME='中国'");
CreateScript(Page,"ShowLayer();","SHOW");
}
}


WebForm2.aspx

<%@Pagelanguage="c#"Codebehind="WebForm2.aspx.cs"AutoEventWireup="false"Inherits="WSGUI1.WebForm2"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>WebForm2</title>
<metaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1">
<metaname="CODE_LANGUAGE"Content="C#">
<metaname="vs_defaultClientScript"content="JavaScript">
<metaname="vs_targetSchema"content="https://schemas.microsoft.com/intellisense/ie5">
<scriptlanguage="javascript">
functionhide()
{
parent.MyFormLayer.style.display="none";
}
</script>
</HEAD>
<bodyMS_POSITIONING="GridLayout">
<formid="Form2"method="post"runat="server">
<tableborder="0"width="100%"cellspacing="0"cellpadding="0"bgcolor="#6887bb"height="100%"
id="table1"style="BORDER-TOP-STYLE:outset;BORDER-RIGHT-STYLE:outset;BORDER-LEFT-STYLE:outset;BORDER-BOTTOM-STYLE:outset">
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
<palign="center"><fontcolor="#ffffff">模仿模态窗口效果</font></p>
<palign="center"><inputtype="button"onclick="hide()"style="WIDTH:80px"value="点击关闭">
<asp:Buttonid="Button1"runat="server"Text="ASPXTest"></asp:Button></p>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
</form>
</body>
</HTML>

WebFom2.aspx.cs

namespaceWSGUI1
{
///<summary>
///WebForm2的摘要说明。
///</summary>
publicclassWebForm2:System.Web.UI.Page
{
protectedSystem.Web.UI.WebControls.ButtonButton1;

privatevoidPage_Load(objectsender,System.EventArgse)
{
//在此处放置用户代码以初始化页面
if(!IsPostBack)
{
Button1.Attributes.Add("onclick","hide()");
}
}

}

  • 相关推荐
  • 大家在看
  • 微软正式发布.NET 6 坚定拥抱跨平台与统一开发体验

    随着微软正式发布 .NET 6,David Ramel 也于第一时间在 Visual Studio Magazine 上,介绍了这一开发框架的最新变化。从 2017 年的 .NET Core 2.0 开始,微软开始将之作为 .NET Framework 的开源、跨平台替代品。然后去年的时候,微软去掉了名称中的“Core”单词,于是现在就直接称作 .NET 5 和 .NET 6 。随着最近引入的机器学习(AI)与浏览器 WebAssembly 应用,.NET 平台现也能够用于 Web、移动、桌面、游戏、以及物联网(IoT)?

  • .NET 6 的速度比 .NET 5 高出约 40%

    一年前,我曾在 Fusion 性能测试中比较过 .NET5与前一个版本的性能,老实说,.NET5的性能提升给我留下了深刻的印象。今年也不例外:.NET6成为了 NET 家族速度最快的版本。

  • .NET 6 正式发布,迄今为止最快的 .NET

    微软宣布 .NET6 已正式推出,并称其为迄今为止最快的 .NET 版本。发布公告提到,.NET6是首个原生支持 Apple Silicon (Arm64) 的版本,并且还针对 Windows Arm64进行了改进。.NET 团队构建了一个新的动态配置文件引导优化 (PGO) 系统,该系统可提供仅在运行时才会进行的深度优化。其他变化包括使用 dotnet monitor 和 OpenTelemetry 改进云诊断、提供更强大和更高效的 WebAssembly 支持,以及添加用于 HTTP/3、JSON 处理、数学和?

  • Spotify与Netflix合作推出新的专用Netflix Hub

    Spotify今天宣布,它正在与Netflix合作,在该服务中推出一个专用的Netflix hub。该中心可以从移动设备以及服务的web版本访问。这个专用的中心将为所有与Netflix相关的媒体提供一站式服务,其中一些媒体是Spotify独家提供的。这包括Netflix节目和电影的官方配乐,包括流行的新剧《乌贼游戏》和林曼努埃尔·米兰达的故事片《滴答滴答。。。轰以及官方播放列表,包括《金钱抢劫》和《布里奇顿》等节目中的所有授权歌曲。该中心也是Net

  • Rocket Lab宣布将通过现金和股票交易收购Planetary Systems公司

    据TechCrunch报道,Rocket Lab正在继续其收购战略,这次是希望通过现金和股票交易收购Planetary Systems Corporation (PSC)公司。这一消息是在该公司第三季度财报之前宣布的。Rocket Lab表示,它将以4200万美元的现金收购该公司,外加1,720,841股普通股,并有可能根据未来的业绩增加股份。PSC是一家位于马里兰州的航天器分离系统公司,已有100多次任务使用了其机械分离系统和卫星分配器。该公司制造的 “Canisterized Satellite Di

  • 组织影响力不再:微软优步均选择退出Internet Association

    Axios 证实,微软(Microsoft)和优步(Uber)将退出互联网协会。可知作为一个代表互联网公司和科技行业的游说组织,在行业遭遇竞争与反垄断等问题困扰的同时,该协会在华盛顿特区的影响力却日渐式微。而随着微软与优步这两大科技巨头的淡出,Internet Association 也算是遭遇了另一重打击。互联网协会全球传播与公共事务高级副总裁 Christina Martin 表示:尽管很遗憾失去两位重要成员,但该组织还是尊重相关企业出于时间和资源等

  • Netflix Games 将在 App Store 单独提供以绕过苹果限制

    预计Netflix将在App Store上单独发布其Netflix Games中的每一款游戏,每一款游戏都需要在主应用之上单独下载。这项服务已经在安卓上提供。在安卓系统中,Netflix应用程序中有一个专门的游戏标签。一旦你点击一个游戏,它就会打开Google Play,要求你下载该应用,然后要求你登录你的Netflix账户。

  • 三星和Internet Matters启动新项目 以促进积极的在线文化

    据Neowin报道,三星电子宣布与 Internet Matters 合作庆祝反欺凌周( Anti-Bullying Week )。反欺凌周将从今年 11 月 15 日开始,到 11 月 19 日结束,以“One Kind Word”为主题。在internetmatters.org 上,三星微型网站为监护人和父母提供了广泛的资源,了解儿童如何在联网设备的帮助下保持在线安全。它还具有The Online Together Project功能,该项目充当为各种年龄组设计的互动工具,年龄组从 11 岁以下到 14 岁以上。最新的

  • WhatsApp正在开发适用于Windows和macOS的新应用程序

    WhatsApp已经在电脑上使用了一段时间,但它本质上是一款移动应用程序,适用于桌面。据一位来自意大利的消息人士透露,随着该公司正在为Windows和macOS开发一款全新的应用程序,这种情况在未来将发生变化Aggiornamenti Lumia发布了截图和GIF,展示了新软件的外观和主要功能WhatsApp UWP(通用Windows平台,允许在Xbox上使用该应用程序)将按照Windows 11设计,带有半透明面板。即使在关闭时,它也会工作,通知会像往常一样到达,启?

  • 报道预测Netflix会通过苹果App Store提供iOS版手游

    本月早些时候,Netflix 通过一批 Android 手游而正式进军游戏市场。尽管这家流媒体视频巨头表示同样正在开发 iOS 版本,但彭博社记者还是提出了一项严峻的考验 —— 苹果 App Store 政策将阻止 Netflix 在主应用内提供游戏。无论是微软 xCloud、英伟达 GeForce Now、还是 Google Stadia,都需要通过迂回的方式(比如 Web 服务)来绕过苹果对于第三方云游戏平台的围剿。换言之,除非苹果愿意更改 App Store 政策、或授予 Netflix 豁

这篇文章对你有价值吗?

  • 热门标签

热文

  • 3 天
  • 7天