html元素如下: <input type="text" name="user" id="name" />
为什么这个文本框表单元素加上runat="server"属性后,表单提交时在后台用requset["user"]就取不到值,为null。不加这个runat="server"属性就能取到值,这是为什么
加了runat=sever之后,就变为服务器控件。通常服务器控件不需要这么取值。如果一定要使用request取值,可以看看控件生成的name值,如果使用模板页等一般控件的id与name都会发生变化。
有些属性会改变,有些不会改变。通常都会有一个唯一标识。注意一下,asp.net runat=sever本质。
@wongdavid: 我没有表达runat=sever之后,ID一定会改变。我只举了一个常用的现象,模板页,项目中一般都会用到吧,我们项目都使用到。还有很到情形控件的ID会发生变化,即时不适用模板页。充分了解之后再表达自己的观点也不为迟。
@lucika.zh: 你说的是,主要是看控件内核怎么设计的。
请使用Request.Forms["user"]
刚试了用 string name=Request.Form["user"]; name的值还是为null 应该不是这个问题
@龍四: 我看错了,加了runat="server",需要InputID.value.
没加runat="server",后台需要request获取。
能解释下这是为什么呢
@龍四: 请回归到runat="server"的本质,它的本质除了ID或者其他的不变,但name属性会改变或者其他的属性会改变,也就是说你加了runat="server"这个属性,它会格式化掉相关的标签。你注意观察一下,看一下生成的html代码,你会发现有runat="server"这个属性,输入框name的属性值,是不是已经改了?没加runat="server",输入框name的属性值,是不是没改?道理就是这样,这就是为什么requet无法接受服务器端数据。
解释的很详细 终于明白啦非常感谢啊
@龍四: 给分!!!
你给一个value 你接收就不是null了 <input type="text" name="user" id="name" value=‘3333’/> 你试试
加了runat=”server“ 这个属性表单提交后台 request["user"]就为null
服务器控件加上 ClientIDMode="Static"