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视为以下组合:
- HTTP请求方法等于“POST”
- HTTP标头HTTP_REFERER等于当前URL
这不是100%万无一失的,它没有考虑任何类型的任何状态(即使你不知道它也可能是你想要的),但它是一个post , 回到当前页面。
您可以检查标题以查看输入控件是否返回值(使用Request.Forms作为tvanfosson指出)。 但是,真正重要的问题是为什么你不想添加runat = server。 ASP.NET(MVC除外)实现的整个页面处理大小取决于通过服务器处理页面输出以设置适当的客户端代码以进行回调等。
- 基类包含字段’btnLogin’,但其类型(FoodOrder.App_Code.LinkButtonDefault)不兼容
- Response.redirect不保留HttpContext.Current.Items
- ‘ServiceCollection’不包含’AddSingleton’的定义
- 从来自NSUrlRequest的httpcontext获取变量
- 设置ASP.NET Button属性客户端和读取属性值服务器端
- 无法在C#ASP.NET中绑定多部分标识符“TextBox1.Text”?
- 将绑定xml绑定到Model Class
- 如何在asp.net中单击按钮时动态添加控件?
- 在C#中用代码隐藏创建和发布表单的最佳方法