IsPostBack究竟意味着什么?

我很想知道具体的Page.IsPostBack是什么意思。 我完全了解它在标准ASP.NET页面中的日常使用,它表明用户正在将数据提交回服务器端。 请参见Page:IsPostBack属性

但鉴于此HTML

  

单击“提交”按钮时,将调用页面Page_Load方法,但Page.IsPostBack返回false。 我不想添加runat=server

如何判断首次加载的页面与客户端提交的请求之间的区别?

更新
我添加了所以Request.Form有一个元素,而Request.HTTPMethod是POST,但是IsPostBack仍然是假的?

一种方法是扩展ASP.NET Page类,“覆盖”IsPostBack属性,并让所有页面都从扩展页面派生。

 public class MyPage : Page { public new bool IsPostBack { get { return Request.Form.Keys.Count > 0 && Request.RequestType.Equals("POST", StringComparison.OrdinalIgnoreCase); } } } 

检查Request.Form集合以查看它是否为非空。 只有POST才会在Request.Form集合中包含数据。 当然,如果没有表单数据,则该请求与GET无法区分。

对于标题中的问题,当请求是来自服务器端表单控件的POST时,IsPostBack设置为true。 只使你的表单客户端,失败了。

在您的问题中包含的示例中,没有涉及视图状态; 服务器无法将此请求链接到页面的先前请求并将它们视为一个单元。 导致单击按钮的请求看起来像进入服务器的任何其他随机请求。

通常情况下,您可以将PostBack视为以下组合:

  1. HTTP请求方法等于“POST”
  2. HTTP标头HTTP_REFERER等于当前URL

这不是100%万无一失的,它没有考虑任何类型的任何状态(即使你不知道它也可能是你想要的),但它是一个post回到当前页面。

您可以检查标题以查看输入控件是否返回值(使用Request.Forms作为tvanfosson指出)。 但是,真正重要的问题是为什么你不想添加runat = server。 ASP.NET(MVC除外)实现的整个页面处理大小取决于通过服务器处理页面输出以设置适当的客户端代码以进行回调等。