c#中的return关键字,指的是结束当前所在 函数,不再执行该方法return后面的代码,于是我们认为.net中,当客户端请求时,当我们执行完某些操作后,就应该 立即返回,调试的话,确实照样子执行下去,来看下面的代码,
用vs新建一个web应用程序,只修改Default.aspx和Default.aspx.cs,其他不做修改
Default.aspx代码如下
CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
欢迎使用 ASP.NET!
</h2>
<p>
若要了解关于 ASP.NET 的详细信息,请访问 <a href="http://www.asp.net/cn" title="ASP.NET 网站">www.asp.net/cn</a>。
</p>
<p>
您还可以找到 <a href="http://go.microsoft.com/fwlink/?LinkID=152368"
title="MSDN ASP.NET 文档">MSDN 上有关 ASP.NET 的文档</a>。
</p>
<!--下面两行是新加的-->
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</asp:Content>
Default.aspx.cs代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Label1.Text = "first load";
}
else
{
return;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "click load";
}
}
}
有时候我们理所当然的认为,当我们单击按钮时,Label1应该显示的值是first load,可结果是click load,这是为什么那?
难道return语句没有执行,还是出了什么问题,原因如下:
当你单击按钮后,会执行Page_Load中的return,然后接着执行Button1_Click,根本原因,是你单击按钮时,发送的请求触发了当前页的一系列请求事件,该事件通过委托链式调用绑定的方法(.net是基于事件驱动的),执行Page_Load遇到return后,立即终止了Page_Load的执行,但并没有阻止后续的方法调用,由此 可见Button1_Click在委托调用中,是在Page_Load后的,这就是根本原因,,,