先有一需求:
有页面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 属性必须
一楼说的是对的
MSDN解释:The Form collection is indexed by the names of the parameters in the request body
另外,对于大于100kb的post数据,需要用 Request.BinaryRead