冲田杏梨所有作品,食品模型,广发证券网上交易
这里需要提一下的是,asp.net编程提供了服务端控件和客户端控件的说法,其实还是脱离不了html的本质,客户端和服务端需要交互必须要提交,提交有两种方式get和post,get就是通过向服务端发送连接地址,服务端通过地址的参数来获得信息的,一般这些参数都是明文,能在浏览器地址栏看到。而post是通过表单的input等元素提交到服务端的页面的,这些数据一般是看不到的。asp.net的服务端控件其实就是对一般的html控件做了个包装,大体是通过隐藏控件提供控制的参数的。
这里介绍一个常用的函数_dopostback,这个函数如果如果是asp.net render出来的页面就是自动产生这个函数,比如有带autopostback属性的控件,且其属性为true的页面,带编辑列的datagrid页面。
__dopostback是通过__eventtarget,__eventargument两个隐藏控件向服务端发送控制信息的,__eventtarget为要调用控件的名称,如果要调用的控件是子控件,用''$'或':'分割父控件:子控件,__eventargument是调用事件时的参数
下面演示下如何调用后台事件:
1.新建工程
2.拖入一个服务端button1,一个dropdownlist1和一个客户端button
3.设置dropdownlist1的autopostback属性为true,button1的visible为false
4.双击button1,在事件里写下response.write("hello:" );
5.页面的html里找到客户端button,写入onclick="__dopostback('button1','')"
6.编译,运行,点击button是不是出现了"hello"
7.查看源代码,发现里面多了下面行
<script language="javascript">
<!--
function __dopostback(eventtarget, eventargument) {
var theform;
if (window.navigator.appname.tolowercase().indexof("netscape") > -1) {
theform = document.forms["form1"];
}
else {
theform = document.form1;
}
theform.__eventtarget.value = eventtarget.split("$").join(":");
theform.__eventargument.value = eventargument;
theform.submit();
}
// -->
</script>
以及两个隐藏控件
<input type="hidden" name="__eventtarget" value="" />
<input type="hidden" name="__eventargument" value="" />
值得注意的是,_dopostpack的第一个参数是大小写不敏感的
细心的人会发现,在__dopostback里,提交调用的是theform.submit(),这样就导致对form的onsubmit事件校验失效了,幸好这个问题在asp.net 2.0已经修复了。这里提供一个替换的解决办法,在form的最下面插入下面的代码,这段代码在保证不管是不是render出来的页面均有效
<script language="javascript">
<!--
function __dopostback_ex(eventtarget, eventargument)
{
var theform;
if (window.navigator.appname.tolowercase().indexof("netscape") > -1) {
theform = document.forms[0];
}
else {
theform = document.forms[0];
}
if(!theform.__eventtarget)
{
theform.appendchild(document.createelement("<input type='hidden' name='__eventtarget'>"));
}
if(!theform.__eventargument)
{
theform.appendchild(document.createelement("<input type='hidden' name='__eventargument'>"));
}
theform.__eventtarget.value = eventtarget.split("$").join(":");
theform.__eventargument.value = eventargument;
if ((typeof(theform.onsubmit) == "function"))
{
if(theform.onsubmit()!=false)
{
theform.submit();
}
}
else
{
theform.submit();
}
function __dopostback(eventtarget, eventargument)
{
__dopostback_ex(eventtarget, eventargument);
}
}
// -->
</script>
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!!
点击进行留言回复
网友评论