作者:张老三的专栏
http://blog.csdn.net/billy_zh/
在一些应用中,希望将模式对话框的值回送(PostBack)到服务端,也就是执行一个服务端操作,从而刷新页面。
举个例子:比方说新建一个订单,此时希望能在模式对话框中选择产品,并将产品的ID返回,同时刷新订单中的产品项,解决的方法有多种,这里只介绍执行服务器操作的方法。
要将客户端数据回送(PostBack)到服务端并执行相应操作,显然必须提交form并设置隐藏域__EVENTTARGET的值,好在asp.net已为我们完成了这些,只要以合适的参数调用__doPostBack就可以了。
另一个问题是如何把模式对话框的值也传过服务端,这个就好说了,有多种方法,在这里用一个隐藏域来保存值,当然这个隐藏域必须加上runat="server"属性。
下面给出部分代码:
主页面TestDialog.aspx:
<form id="form1" runat="server">
<input type="hidden" id="txtValue" runat="server"/>
<br/>
<asp:LinkButton id="lbtnOpen" runat="server" text="打开对话框"/>
<br/>
对话框返回值:<asp:TextBox id="txtValue2" runat="server"/>
</form>
主页面后置文件TestDiallg.aspx.cs:
private void Page_Load( object Sender, EventArgs e ) {
StringBuilder sb = new StringBuilder();
if ( ! IsClientScriptBlockRegistered( "clientScript" ) ) {
sb.Append( "<script language='javascript'>\n" )
.Append( " function addproduct() { \n" )
.Append( " var ret = window.showModalDialog( 'test2.aspx' ); \n" )
.Append( " if ( ret != undefined ) { \n" )
.Append( " document.getElementById('" + txtValue.ClientID + "').value = ret \n" )
.Append( " __doPastBack('" + lbtnOpen.UniqueID + "', '');\n" )
.Append( " } \n" )
.Append( " }\n " )
.Append( "</script>\n" );
RegisterClientScriptBlock( "clientScript", sb.ToString() );
}
lbtnOpen.Attributes.Add( "onClick", "javascript:addproduct();" );
}
private void lbtnOpen_Click( object Sender, EventArgs e ) {
txtValue2.Text = txtValue.Value;
}
private void InitializeComponent()
{
this.Load += new EventHandler( this.Page_Load );
this.lbtnOpen.Click += new EventHandler( this.lbtnOpen_Click );
}
对话框页面test2.aspx:
<form id="form1" runat="server">
<asp:TextBox id="txtValue" runat="server"/>
<br/>
<input type="button" id="hlnkOk" value="确定" runat="server"/>
</form>
对话框页面后置文件Test2.aspx.cs
private void Page_Load( object Sender, EventArgs e ) {
StringBuilder sb = new StringBuilder();
if ( ! IsClientScriptBlockRegistered( "clientScript" ) ) {
sb.Append( "<script language='javascript'>\n" )
.Append( " function closedialog() { \n" )
.Append( " window.returnValue = document.getElementById('" + txtValue.ClientID + "').value;\n" )
.Append( " window.close();\n" )
.Append( " }\n " )
.Append( "</script>\n" );
RegisterClientScriptBlock( "clientScript", sb.ToString() );
}
hlnkOk.Attributes.Add( "onClick", "javascript:closedialog();" );
}
注意:在对话框页面任何回传(PostBack)操作都将导致一个新窗口被打开,解决方法请到csdn论坛查找。
分享到:
相关推荐
2. 页面使用了大量的Ajax技术,没有任何的直接提交或回传(Submit Form or postback),分页,查询,对话框,都以Ajax的方式实现。 3. 所有Ajax技术的客户端全部基于JQuery,服务端则使用我的Ajax服务端框架 4. 客户端...
用友U9客户化开发 Callback & Postback 入门 v0.8
Understanding more about events and postback
【基于IIS层的IIRF实现URL重写 + 完美解决POSTBACK问题】 1.请在 Windows2003 操作系统环境下测试。 2.请确认您的IIS版本为 IIS6.0+ 。 3.请确认您已经将此项目的ASP.NET网站版本手动设置为 .NET 2.0. 4.请将Bin...
Client通过Submit Form的方式将填入Form的数据提交给Server进行处理。我们现在来看看ASP.NET整个Postback程序处理的过程。 首先我们通过一个Sample来看ASP.NET如何处理一个通过Click一个Button引起的Postback。下面...
GridView 第一列CheckBox全选!postBack和JS方式
一个基于C#+Ajax 实现的PostBack Async Callback 程序例子代码。
例程基于ASP.NET webforms框架,采用POSTBACK技术,展现了对数据库相关的各项操作与内容展示,并实现了分页显示。相关数据库请下载本人资源《中国省级区域概况-ASP.NET例程数据库(SQL2008R2)》...
Load and Display Page Contents Asynchronously with F ull Postback Support-n
在Asp.net webform中,如何找出哪一个按钮触发Button PostBack事件。
在我的随笔《Page,你是怎样处理回发事件的?》中曾提出一个疑问,如何得到引起页面PostBack的控件?通过阅读Page类的源码,误打误撞,无意中看到了__EVENTTARGET和__EVENTARGUMENT这两个常量的定义,并通过调试分析...
IIRF_URLRewrite基于IIS层的IIRF实现URL重写+完美解决POSTBACK问题 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软
asp.net的Button默认行为是将页面回送后执行服务器代码。在页面中还可以使用html的按钮控件input type=”button”,但是这种HTML控件在cs文件中引用不到。 asp:Button在cs文件中可用,如何使它只执行客户端...
如何在ASP.NET使用JavaScript阻止页面回传postbacks
对ASP.NET GridView Image 命令按钮Multiple PostBacks处理技巧程序例子。
但是URL重写,并且,将一个带假目录的虚拟地址重写到一个不带假目录的页面时,由于浏览器客户端和服务端此时的当前页面计算方法是不同的,就会发生相对路径的匹配错误问题!真实很严重的问题啊! 解决的办法,只有...
-增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中删除SplitColor属性,增加CollapseMode, ...
可笑地回发哈希