ASP.NET 2.0 Tips(1):跨页提交

在ASP.NET 1.x的时候,很多朋友可能需要进行跨页提交的处理,也就是从页面A能够提交到页面B,甚至不同的Control其目标处理页面也各不相同。尤其是从ASP/JSP/PHP转过来的开发人员,可能更有这种需求。但很不幸,在ASP.NET 1.x的时候,处理这种跨页请求是十分丑陋的,需要非常多的“技巧化”处理。

在ASP.NET 2.0的时候,对于跨页提交已经有了非常合理的解决方案,以下就是一个示例。

SourcePage.aspx: 请注意Button1的PostBackUrl属性设置

<%...@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">... public string YourName ...{ get ...{ return this.TextBox1.Text; } } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="请输入您的姓名" Width="183px"></asp:Label> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="提交" PostBackUrl="~/TargetPage.aspx" /></div> </form> </body> </html> TargetPage.aspx:请注意PreviousPageType的属性设置
<%...@ Page Language="C#" %>
<%...@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">... protected void Page_Load(object sender, EventArgs e) ...{ this.Label1.Text = PreviousPage.YourName; } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" ></asp:Label> </div> </form> </body> </html>

OK,就通过这么简单的两个属性设置,就可以非常方便的得到跨页提交的特性。当然,您也可以根据您自己的需求,比如每个Control需要提交到不同的页面来进行更加复杂的设置。


 
打赏作者

“ASP.NET 2.0 Tips(1):跨页提交”的17个回复

  1. 当然是Targetsource.aspx了
    看了文章后,最好实际试一下:),而不只是看,更加不要把源代码拷过去然后就Run Success就认为万事大吉了。

  2. PreviousPage.YourName

    这样处理方便得多了. 但面向整体的设计而言, 跨页的提交还是显得不太优雅. 我觉得这只是解决特定问题的一种特殊手段, 是不适合大规模使用的.

  3. 但是如果一个页面中有多个要提交的呢?
    比如在index.aspx中有一个要提交到Login.aspx和一个提交到SEARCH。ASPX的。提交后,是把Form里所有值都传过去?不知支不技持多个FORM,我觉得这样较合理,如ASP中的一样。

  4. 纯粹是初学者,想要学学.net , 但是总是不得其门而入?

    这两天特别郁闷,VWD 的站点管理中,为什么我的asp.net网站管理工具的"提供程序"只有AspNetSQLProvider?为什么没有AspNetAccessProvider?

    我的.net Framework版本是2.0.50215,在网站管理工具的"提供程序"中只有AspNetSqlProvider,各位高手麻烦看一下!我郁闷死了.

    在"安全"选项卡中提示我数据存储在Access文件中,可

  5. 请教一下: 现在在 1.ascx中有个控件如TextBox,那么在1.aspx中引用了这个1.ascx(register …).在1.aspx中有个Button,当触发click时要读取或者调用1.ascx.cs中的事件,为什么不成功?或者说发现错误码:未引用实例变量(类似这样的提示)..我看过duwamish7.0中,它是利用如:
    1.aspx.cs 来调用1.ascx上的事件处理,不直接去调用1.ascx控件或事件的.谢..

  6. <%…@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>
    这句是不是限制死了只能由SourcePage.aspx页面来提交给TargetPage.aspx?

  7. painie,是的,只能限制死了,
    我的问题是多个A.aspx提交到一个B.aspx怎么处理啊?比如A1.aspx,A2.aspx.A3.aspx…….An.aspx提交到B.aspx怎么处理呢?

  8. 开心,你好。不知道,你有没有注意这个问题,当向一个 asp.net页面中同时添加一个 客户端form和一个服务端控件时(比如login控件),客户端FORM和服务端控件在IE下都不能正常运行(不论是IE 6.0还是IE 7.0)。在firefox下,服务端控件可以正常运行。
    我的调试环境即页面环境如下:
    XP PRO EN+SQL 2005 EXPRESS+VS 2005 PRO
    ASP.NET页:一个html form,form 的method采用get,action指向一个搜索引擎的处理页面;同时页面布置了一个login控件。

    1.当我输入了搜索条件后,点击html form的submit按钮后,出现如下错误提示:
    "Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster"
    2.当我在login中输入用户登陆信息后,点击login按钮,页面没有任何反应。

    以上1和2都是在IE 中进行的操作。
    -----------
    不知道开心能否帮个忙,指点一下迷津。我先在此谢过。

评论已关闭。