首页 > 编程 > .NET > 正文

Asp.Net的控件如何与Server交互

2024-07-10 13:09:43
字体:
来源:转载
供稿:网友

商业源码热门下载www.html.org.cn

以前写asp的程序的时候,知道只有type设置为submit的按钮,才能触发表单提交数据给服务器端。
如:asp.net中的button就是等于<input type="submit">.
但是现在asp.net的好多控件都可以任意的和服务器端交互,如:linkbutton.
这是怎么实现的呢?
难道是一种全新的方式吗?
其实,这只是微软的一种变通的方式。
我们先来看看客户端的代码是如何的.
我这里是一个带有linkbutton的页面,
其实linkbutton在客户端就等于html里的a.
我们来看看linkbutton为什么也能和服务器端交互?
当我们点击右键查看该页面的源代码时,看到:

<script type="text/javascript">
<!--
var theform = document.forms['ctl00'];
if (!theform) {
    theform = document.ctl00;
}
function __dopostback(eventtarget, eventargument) {
    if (!theform.onsubmit || (theform.onsubmit() != false)) {
        theform.__eventtarget.value = eventtarget;
        theform.__eventargument.value = eventargument;
        theform.submit();
    }
}
// -->
</script>
<a id="simplelinkbutton1" href="javascript:__dopostback('simplelinkbutton1','')">click me</a>
<input type="hidden" name="__eventtarget" id="__eventtarget" value="" />
<input type="hidden" name="__eventargument" id="__eventargument" value="" />

从上面的代码中就可以看出simplelinkbutton1是一个链接,通过客户端代码来提交所在的表单。
而其中两个隐藏域,则用来交换数据的,就是把__dopostback的两个参数值赋给这两个隐藏域。
这就是为什么linkbutton也具有提交数据的最直观的原因。

那么这上面的代码是怎么生成的呢?
我们看linkbutton的源代码就可以清楚地知道:

protected internal override void onprerender(eventargs e)
{
      base.onprerender(e);
      if ((this.page != null) && this.enabled)
      {
            this.page.registerpostbackscript();
            if ((this.causesvalidation && (this.page.getvalidators(this.validationgroup).count > 0)) || !string.isnullorempty(this.postbackurl))
            {
                  this.page.registerwebformsscript();
            }
      }
}

以上只是把自己在学习工作过程中的一些体会记录如此,防止自己忘记了。
也望和大家多多交流!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表