|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Windows本身的所有问题都会一成不变的也累加到了它的身上。安全性、稳定性、跨平台性都会因为与NT的捆绑而显现出来;技能一:在客户真个javascript剧本中猎取服务器端控件的值
之前,当我们必要在剧本里会见页面内一个工具的时分,一样平常都是经由过程工具的id或name。就像如许――
//...
functiongetText()
{
returndocument.form1.Text1.value;//Text1就是工具的id
}
//...
如今,ASP.NET让我们愈来愈习气利用TextBox作为用户输出的路子。假如我们想在客户端剧本里会见一个TextBox,本来的做法就行欠亨了――
//...
functiongetText()
{
returndocument.form1.Text1.value;//Text1仍是工具的id?
}
//...
扫瞄页面时,会有一个剧本毛病――“Text1工具不存在”。缘故原由就在于,Text1作为服务器端控件TextBox,在被发送到客户端之前,先由.NETFramework举行转换,而它的id明显也是转换的一部分。假如你在客户端检察页面的源代码,你能够发明本来的Text1已不存在,取而代之的是一个一般的INPUT――
这就是转换的了局,id不再是计划时所指定的id。假如我们要在客户端会见这个文本输出框,也必需改动会见的id。怎样改动?间接将
document.form1.Text1
改成
document.form1.item("Test_Text1")//保险起见,利用item由id或name失掉控件
大概
document.getElementByID("Test_Text1")//保险起见,利用getElementByID由id或name失掉控件
能够吗?固然能够!只需你的控件id流动是"Text1"。
可是,只要这个前提还不敷。"Test"又是甚么?它也应当被思索在内(幸亏form的id不会改动,不然要体贴的内容又会多一个)。
你也许已看出,Test就是这个Web页面的名字。对吗?――不完整对:P
切实地说,控件转换后id中的"Test"是其地点的Web窗体工具的ClientID。一切的ASP.NET工具都在服务器端有一个实例(假如你面向工具的基本不敷,倡议也补完一次吧),而这个"Test",就是这个页面实例工具的ClientID。而ClientID,则是每一个Web窗体页的一个属性,它指了然这个Web窗体在客户真个标识。
为何要这么庞大?事理很复杂,我们其实不能在客户端剧本里断定页面的ClientID和控件的ID。
那应当如何做呢?
“在服务器端代码里天生客户端javascript。”――仿佛十分庞大,实在其实不坚苦,只需在服务器端Page_Load事务里加上(在IsPostBack判别以外)――
RegisterStartupScript("start",
"
");
RegisterStartupScript是Web窗体(System.Web.UI.Page类)的一个办法,感化是在天生的页面里注册客户端剧本。
在这里,我们增加了一个getText()函数,感化和之前的getText()一样,所分歧的在于,它所会见的控件id并不是剧本内指定,而是在服务器端依据页面的ClientID(this.ClientID,this就是页面本人)和Text1控件的ID(this.Text1.ID)静态天生的。
编译以后从头扫瞄,我们会在新的页面源代码里找到这个由服务器端代码天生的javascript函数。此时,在页面的其他中央挪用getText()函数就将准确失掉Text1中的内容了。
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧 |
|