首页 新闻 会员 周边 捐助

asp.net跨页传参问题

0
悬赏园豆:5 [已解决问题] 解决于 2010-09-20 12:26

     问题一:传统表单提交。

       关于传统表单的提交,可以在“源页”(发起者)设置form表单元素action动作、method方法属性,

例如:<from id="from1" action="目标页" method="post">,然后在“目标页”(表单接收者)用Request.Form接收表单信息。为了方便目标页接收表单中控件中的数据,将表单中的html控件标上runat="server"属性(submit控件除外),以便服务器程序根据控件ID读取数据。

     为什么我在上面的form表单中,直接加服务器控件,比如<asp:TextBox runat="server"...>,会报错。错误提示的大致意思是说服务器控件所在的表单必须有runat="server"属性。再问一下,如果表单中的数据控件,不加上runat标记,目标页又怎样解读提交表单的数据。

    问题二:asp.net2.0引入了另一种跨页面传参的技术。

           就是表单<form id="form1" runat="server">,表单中有一个实现了IButtonControl的提交按钮,PostBackUrl设置为目票页,表单中全为服务器端控件,比如<asp:TextBox runat="server"...>。我现在想要在目标页中以Requet.Form形式解读表单中的数据。

       为什么用Request.Form解读时,只有源页面中提交按钮的信息,其它服务器控件解读不出来。

注:不要讲解在目标页中设置previousPage的方法。

希望知道的朋友分享一下。

X教授的主页 X教授 | 菜鸟二级 | 园豆:240
提问于:2010-09-19 17:00
< >
分享
最佳答案
0

你上面提到的那个错误,【服务器控件所在的表单必须有runat="server"属性】,其实并不是只要是服务器控件,都一定要放在具有runat="server"的form中的,比如Label和Repeater就可以在没有runat="server"的表单运行,其实这里有个规定,凡是服务器控件实现了IPostBackDataHandler接口或IPostBackEventHandler接口,就必须放在具有runat="server"的form中,而<asp:Button>和<asp:TextBox>一个实现了IPostBackEventHandler,一个实现了IPostBackDataHandler

还有你提到的,如果没有runat="server"怎么在别的页中获取控件的值,其实这个可以用Request.Form[""]来获得,参数是你要获得的表单元素的name值
如:<input type="text" name="username" />,可以这么获取
Request.Form["username"]

收获园豆:3
yixin841210 | 小虾三级 |园豆:1138 | 2010-09-19 21:16
终于明白了,当时我用在我提交的表单中我没有设置name属性,Request.Form接收表单数据时我是用Id属性接收的,所以看不到数据。
X教授 | 园豆:240 (菜鸟二级) | 2010-09-20 12:28
:补充一下:<input type="text" id="un" name="username" runat="server" />,用Request.Form["un"]也可以获取。呵呵!
X教授 | 园豆:240 (菜鸟二级) | 2010-09-20 12:35
@X教授:恩,明白,why?你可以在客户端"查看源文件看",看它最终呈现的html代码,最终的形式是这样的: <input name="un" type="text" id="un" /> name和id的值一样了,所以用ID也可以获取到,呵呵~~
yixin841210 | 园豆:1138 (小虾三级) | 2010-09-20 12:41
其他回答(2)
0

设置PostBackUrl的同时把Form的action也设成目标页试一下看

如果不行,那就回归传统,用客户端控件吧

没有设置previousPage,自然也没办法在目标页“根据控件ID读取数据”了,previousPage限制多多,还是抛弃的好

收获园豆:1
_A_A | 园豆:1139 (小虾三级) | 2010-09-19 20:47
{设置PostBackUrl的同时把Form的action也设成目标页试一下看}我试过了,不行的。总之这个postBackUrl还是和目标页中设置virtualpath一起用,然后用previousPage读取表单数据。在源页中用postBackUrl设置目标页时,目标页不适合用Request.From接收。楼上的说得对,还是回规传统。
支持(0) 反对(0) X教授 | 园豆:240 (菜鸟二级) | 2010-09-20 12:45
0

第一个错误是因为form没有加runat属性。

在目标页能过post获取数据里,不需要发送页的控件是服务器端控件,html控件也可以。只需要在目标页Request.Form["controlID"]就可以获取到值。而要获取提交页面的控件数目,可以遍历Form。

收获园豆:1
Astar | 园豆:40805 (高人七级) | 2010-09-20 08:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册