ASP.NET跨页提交和表单提交(转)
一.asp.net表单提交
default.aspx代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Test</title>
</head>
<body>
<form id="form1" action="1.aspx" method="post">
<div>
<input id="txtuser" type="text" />
<input id="Submit1" type="submit" value="提交" />
</div>
</form>
</body>
</html>
目标文件1.aspx代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
string user =Request.Form["txtuser" ];
if (user != "" )
Response.Write(Request.Form["txtuser" ]);
else
Response.Write( "你还没有输入任何信息" );
%>
</div>
</form>
</body>
</html>
a.如果进行运行的话将会出现在1.aspx中将无法进行处理提交上来的表单,为什么呢??
b.是不是asp.net下表单只能提交到本页即default.aspx只能提交到default.aspx?
解决方法:
a.其实这种解决方法很简单,就是在除了提交按钮以外,全部都必须加上“runat=server”,这个是为了能在服务器端根据控件ID来找到此控件,不然将无法找到此控件,因此将不会达到自己预想的结果,所以应该改为如下代码:
<form id="form1" action="1.aspx" method="post">
<div>
<input id="txtuser" type="text" runat="server"/>
<input id="Submit1" type="submit" value="提交" />
</div>
</form>
这样的话就可以很容易的达到提交表单让其他页面来进行处理了
b.当然不是了。很显然可能是受了如下这段代码的影响,才会出现这种想法的:
正确的代码:
<form id="form1" action="1.aspx" method="post">
<div>
<input id="txtuser" type="text" runat="server"/>
<input id="Submit1" type="submit" value="提交" />
</div>
</form>
错误的代码:
<form id="form1" action="1.aspx" method="post" runat="server">
<div>
<input id="txtuser" type="text" runat="server"/>
<input id="Submit1" type="submit" value="提交" />
</div>
</form>
大家注意到了runat="server"了没有 与上面的代码比起来就多了这个这个 这个也是关键所在,当出现runat="server"的时候,它的优先级别比action="1.aspx"高,所以会出现回发的现象,把action给忽略掉,所以就无法进行处理了。
我们可以去掉runat="server"来解决这个问题,还可以在不去掉runat="server"的情况下,根据修改提交按钮,并在提交按钮点击事件当中来解决这个问题。
不去掉runat="server":
将提交控件改为服务器控件:
<form id="form1" action="1.aspx" method="post" runat="server">
<div>
<input id="txtuser" type="text" runat="server"/>
<input id="Submit1" type="submit" value="提交" runat="server"/>
</div>
</form>
然后在提交按钮的控件当中写着:
Server.Transfer("1.aspx");这个时候就可以完成两个页面之间的传递了。注意:这里不可以使用Response.Redirect("1.aspx")否则仍然无法完成此操作。
总结:
1.form中未加runat="server"则需要除了提交按钮以外的所有控件都需要加上"runat=server",提交按钮的位置可以放在表单内的任何地方。
2.form中加了runat="server"则这个时候如果有action则将被忽略掉,提交按钮如果没有成为服务器端控件,而且没有进行Server.Transfer导航处理,则将无法完成
二、跨页提交的另外一种做法
在ASP.NET 1.x的时候,很多朋友可能需要进行跨页提交的处理,也就是从页面A能够提交到页面B,甚至不同的Control其目标处理页面也各不相同。尤其是从ASP/JSP/PHP转过来的开发人员,可能更有这种需求。但很不幸,在ASP.NET 1.x的时候,处理这种跨页请求是十分丑陋的,需要非常多的“技巧化”处理。
在ASP.NET 2.0的时候,对于跨页提交已经有了非常合理的解决方案,以下就是一个示例。
若要获取源页的公共成员,必须先获取对源页的强类型引用。
可以通过多种方法来执行此操作。第一种方法是在目标页中包含一个 @ PreviousPageType 指令,该指令允许您指定源页:
<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>