• 02
  • 8月

今天玩asp.net时遇到了一个小小的问题:页面中有一个以JavaScript控制的select控件,用于时间的选择。

如何在asp.net的后台文件.cs代码中取得它的值呢?

第一个想到的方法是asp.net中最“正宗”的方法,把这控件标为runat=”server”,就可以在.cs代码中直接使用它的id访问它的属性了。但问题是这个控件是造客户端JavaScript代码来添加它的值的。而将select变为runat=”server”后,控件在客户端的id会被系统自动改变,不再是VS设计器中的那个id了。于是那段JavaScript就失效了。

然后就想到的传统的Form法,如同asp、php那样,在接受数据的页面取得post来的内容。在asp中,可以用 Request.Form(“XXX”)得到Form中的值。php中可以直接访问枚举数组$_POST[‘XXX’]。查阅文档,asp.net使用的与asp几乎相同的方法,使用Request.Form[“XXX”];(注意三种方法用的括号)。

但在我的程序中却意外的发现,这样取得的值始终是null。问题又出在哪呢?

又是一番排查,终于找到问题所在——又是可恶的name属性惹的祸!

这个问题其实在做php时就发现过,很简单:表单传值时只认name属性。如果不设置一个控件的name属性,不管你接收页用的是什么技术(asp、php、asp.net…)都无法取得这个控件的值。

这也就是为什么用DreamWeaver生成的控件代码总是会自动生成内容相同的两个属性,如:<input type=”text” id=”tt” name=”tt” />。JavaScript只认id、Form传值只认name。没办法啊!

总结一下,两句话:

1.asp.net中可以用Request.Form[“XXX”]这个索引指示器来实现传统的表单内容取值。

2.表单中的控件,只要不是runat=”server”,需要给它设上name=”xxx”的属性。

最后引用一篇介绍asp.net的Request对象的文章:asp.net技术浅析(九)

标签:

您可以对这篇文章发表一条评论,或者在您自己的网站中引用 (Trackback) 它

发表一条评论

所有标签:.net Ajax Java javascript Linux map MySQL RSS TD-SCDMA Ubuntu vim web Win7 乱码 基础知识 备份 奥运会 希望泉 性能 缓存 编程