ASP.NET跨页提交和表单提交

来源:互联网 发布:周立功单片机 招聘 编辑:程序博客网 时间:2024/06/01 10:43

ASP.NET跨页提交和表单提交(转)  

一.asp.net表单提交


default.aspx代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="1.aspx.cs" Inherits="_1" %>

<!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" %>

原创粉丝点击