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

王朝asp·作者佚名  2008-05-30
窄屏简体版  字體: |||超大  

以前写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();

}

}

}

以上只是把自己在学习工作过程中的一些体会记录如此,防止自己忘记了。

也望和大家多多交流!

http://www.cnblogs.com/maplye/archive/2006/08/29/489338.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航