问题一:传统表单提交。
关于传统表单的提交,可以在“源页”(发起者)设置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的方法。
希望知道的朋友分享一下。
你上面提到的那个错误,【服务器控件所在的表单必须有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"]
设置PostBackUrl的同时把Form的action也设成目标页试一下看
如果不行,那就回归传统,用客户端控件吧
没有设置previousPage,自然也没办法在目标页“根据控件ID读取数据”了,previousPage限制多多,还是抛弃的好
第一个错误是因为form没有加runat属性。
在目标页能过post获取数据里,不需要发送页的控件是服务器端控件,html控件也可以。只需要在目标页Request.Form["controlID"]就可以获取到值。而要获取提交页面的控件数目,可以遍历Form。