Asp.net页面之间通过脚本传递数据.doc

preview
需积分: 0 4 下载量 59 浏览量 更新于2007-09-05 收藏 26KB DOC 举报
在Asp.net中,页面间的数据传递通常有多种方法,如使用Query String、Session、View State、Cookies等。然而,当需要在不刷新整个页面的情况下传递数据时,可以通过客户端脚本(JavaScript)来实现。以下将详细介绍如何在Asp.net页面之间通过脚本传递数据。 创建一个名为`WebForm1.aspx`的页面,它包含一个TextBox控件(用于输入数据)和一个Button控件(触发脚本事件)。在`Page_Load`事件处理程序中,我们编写代码来注册客户端脚本。这段代码会创建一个JavaScript函数`OpenWin()`,当点击Button时调用此函数,打开一个模态对话框(modal dialog): ```csharp private void Page_Load(object sender, System.EventArgs e) { if (!Page.IsClientScriptBlockRegistered('clientScript')) { StringBuilder sbScript = new StringBuilder(); sbScript.Append('<script>\n'); sbScript.Append('function OpenWin(){\n'); sbScript.Append('var str=window.showModalDialog(\'WebForm2.aspx\',document.Form1.txtWndName.value)\n'); sbScript.Append('if(str!=null) document.Form1.txtWndName.value=str\n'); sbScript.Append('}\n</script>\n'); string script = sbScript.ToString(); RegisterClientScriptBlock('clientScript', script); } this.btnOpen.Attributes.Add('OnClick', 'OpenWin()'); } ``` 这里,`OpenWin`函数使用`window.showModalDialog`方法打开`WebForm2.aspx`,并将TextBox的值作为参数传递。当模态对话框关闭时,如果返回值不为空,则将其赋值回TextBox。 接着,创建`WebForm2.aspx`页面,它包含一个嵌套的框架集(frameset)。这个框架集有两个框架,顶部的框架为空,底部的框架加载`WebForm3.aspx`。这样,用户在`WebForm3.aspx`中的操作可以影响`WebForm2.aspx`,从而间接影响`WebForm1.aspx`: ```html <frameset rows='0,*'> <frame src='about:blank' /> <frame src='WebForm3.aspx'></frameset> ``` 然后,创建`WebForm3.aspx`页面,它接收`WebForm1.aspx`传递的数据,并在`Page_Load`事件中,根据页面是否为PostBack来决定是否注册JavaScript脚本。这段脚本将TextBox1的文本作为返回值,关闭当前窗口,并将其传递回`WebForm1.aspx`: ```csharp private void Page_Load(object sender, System.EventArgs e) { if (Page.IsPostBack) { StringBuilder sbScript = new StringBuilder(); sbScript.Append('<script>\n'); sbScript.Append('window.parent.returnValue='' + this.TextBox1.Text + ''\n'); sbScript.Append('window.parent.close()\n'); sbScript.Append('</script>\n'); string script = sbScript.ToString(); if (!Page.IsClientScriptBlockRegistered('clientScript')) { RegisterClientScriptBlock('clientScript', script); } } } ``` 在这个过程中,`window.parent`是父窗口的引用,即`WebForm2.aspx`。通过设置`window.parent.returnValue`,我们可以将数据返回到`WebForm2.aspx`,进而传递回`WebForm1.aspx`。 这个例子展示了如何利用JavaScript的模态对话框和窗口对象属性进行页面间的非刷新数据传递。这种方式在某些场景下非常有用,比如需要保持用户界面的状态而不重新加载整个页面。但需要注意的是,这种方法仅适用于简单的数据传递,对于复杂的数据结构或大量数据,可能需要考虑其他更高效的方法,如服务器端的Session或ViewState。
身份认证 购VIP最低享 7 折!
30元优惠券