asp.net form 表单怎样像ASP一样的提交。

来源:互联网 发布:山西冰点网络 编辑:程序博客网 时间:2024/05/08 11:09
先有一需求:有页面Default.aspx为开始页面,result.aspx为接收form表单页面。Default.aspx 代码:通过javascript生成checkbox选择框。<%@ 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>    <title>无标题页</title>    <script type="text/javascript">        function creat()        {            var text=document.createElement("input");            text.setAttribute("name","creat");            text.id="creat";            text.type="checkbox";            text .setAttribute("checked","false");            text .value="ssfsfdf";            document.forms["iddd"].appendChild(text);        }    </script></head><body onload="creat();">    </form>         <form id="iddd" action="result.aspx" method="post">        <input id="bn" name="bn" type="text" value="123" />        <input name="wwws"  type="checkbox" />        <input type="submit"  value="submit" /></form></body></html>result.aspx.cs 代码仅接收统计default.aspx页面的表单控件的个数。 protected void Page_Load(object sender, EventArgs e)    {        string s = Request.Form.Count.ToString ();        Response.Write(s);    }经过测试:如果input 的type 为文本框,result.aspx 页面返回值3.     如果input 的type 为checkbox,radio 页面返回值就少了1               但是如果input 的type为checkbox 存在checked 并且disabled不存在则页面返回值仍然为3,如果disabled存在则页面的返回值又会减少1.如果为所有的input 加上runat=server 则页面返回值为四(包括了submit).但是javascript 不能控制runat=server 所以动态的input type=checkbox 不存在checked属性或者存在disabled,就取不到值了,哪位专家,高手。能告诉我这个是什么原因呀???是.net 的机制问题吗???以上结果经过详细验证得出。
 我知道name必须有但是我的描述中,的input 有name属性呀。我的意思是:<input type="checkbox" name="chk" checked="checked"/>这样Request.Form["ckk"]可以取到值,但是<input type="checkbox" name="chk"/>和<input type="checkbox" name ="chk" disabled="disabled"/>用Request.Form["chk"]就取不到值呀???,请注意区别就是:checked 属性disabled属性。期待哪位专家,高手能告诉小弟??????

name 属性必须

MSDN解释:The Form collection is indexed by the names of the parameters in the request body

另外,对于大于100kb的post数据,需要用 Request.BinaryRead

---------------------------------------以上内容好像与标题不符合------------------------------------------

使用Server.Transfer

        这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:
1,在页面里添加必要的控件
2,创建返回值的Get属性过程
3,创建可以返回表单的按钮和链接按钮
4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面
5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了
以下代码综合实现上述步骤过程的代码:
  源页面代码:
    把以下的代码添加到页面中
   public string Name
{
 get
 {
 return TextBox1.Text;
 }
}

public string EMail
{
 get
 {
 return TextBox2.Text;
 }
}
  然后调用Server.Transfer方法
private void Button1_Click
(object sender, System.EventArgs e)
{
 Server.Transfer("anotherwebform.aspx");
}
   目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
 //create instance of source web form
 WebForm1 wf1;
 //get reference to current handler instance
 wf1=(WebForm1)Context.Handler;
 Label1.Text=wf1.Name;
 Label2.Text=wf1.EMail;
}
或:-------------------------------------------------------------
在WebForm1.aspx 的某个事件中写入如下代码:Server.Transfer("WebForm2.aspx"); //传递页面对象
接着就可以在WebForm2.aspx.cs中获取WebForm1的页面对象。
if(Context.Handler is WebForm1) //判断传递过来的是否WebForm1,因为可能会有多个传递对象。    
{                                             
WebForm1 f1=(WebForm1)Context.Handler; //通过Context.Handler来创建一个WebForm1的页面对象,返 回一个object                                           
Response.Write("Hey,I get it with Context Handler "+((TextBox)f1.FindControl("TextBox1")).Text+" ");      
}