个人见解……

对于浏览器来说是不存在什么客户端控件和服务器端控件的,这是asp.net区分的,目的是为了更容易快捷的开发
服务器控件最终生成的仍然是普通的HTML,比如<asp:textbox>生成<input type="text">(可以在生成的页面中右键查看源文件比较)

可以这么理解,asp.net把你的代码翻译成了html呈现给浏览器,每次页面加载时都是生成html,你可以在页面上查看源文件,与你自己写的不一样的,
至于PostBack,是通过产生的Javascript实现的,服务器端控件postback后产生了许多的javascript代码,

示例:textbox的TextChanged事件

<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" 
            ontextchanged
="TextBox1_TextChanged"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="First_Load" />


protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        Button1.Text 
= "Postback!";
    }

运行后,先查看查看源文件


注意到textbox生成的html控件<input name="TextBox1" type="text">加了个onchange 事件,这个是Javascript代码,不是我们自己写的吧?

还有一段javascript代码

theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value 
= eventTarget;
        theForm.__EVENTARGUMENT.value 
= eventArgument;
        theForm.submit();
    }
}
//]]>
</script>
 
这个是text的onchange事件中调用的一个函数?(待续……)


asp.net中使用Javascript
使用 事实上Page.ClientScript.RegisterClientScriptBlock Page.ClientScript.RegisterStartupScript

使用 Page.ClientScript.RegisterClientScriptBlock生成的JavaScript 函数紧跟在 HTML 代码中开启元素 <form> 的后面。

而Page.ClientScript.RegisterStartupScript在闭合< /form>的前面

从字面上来理解,通过这两个方法可以让开发人员“有意”在生成的html中加入Javascript代码(postback产生的Javascript不是开发人员自己加的,

是asp.net为了“翻译准确”而加上去的)

你用asp.net写好一个文件,含有几次postback,这样的话每次的postback后生成的源文件是不一样的,不仅仅是“显示不同”

下面的代码显示了postback后会重新生成html文件,
aspx

    <title>测试</title>
</head>
<body>
    
<form id="form1" runat="server">   
    
<asp:Button ID="Button2" runat="server" Text="Button" />
    
<asp:Button ID="Button4" runat="server"  Text="Button" />
    
</form>
</body>
</html>
aspx.cs
 sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Button2.Text 
= "首次";
            Page.ClientScript.RegisterClientScriptBlock(
this.GetType(), "myscript""function test()"+
                
"{alert('first_Load');"+
                
"return false;} "true);
        }
        
else
        {
            Button2.Text 
= "PostBck";
            Page.ClientScript.RegisterClientScriptBlock(
this.GetType(), "myscript""function test()"+
                
"{alert('PostBack');"+
                
"return false;} "true);
        }
         
         Button2.Attributes.Add(
"onclick","return test()");
    }

查看首次生成的页面源文件
<script type="text/javascript"> 
//<![CDATA[
function test(){alert('first_Load');return false;} //]]>
</script>
点击左侧Button,弹窗“first_Load”
点击右侧按钮,使页面产生postback,再次查看页面源文件,
<script type="text/javascript"> 
//<![CDATA[
function test(){alert('PostBack');return false;} //]]>
</script>



相关文章: