我很想知道具体的Page.IsPostBack意味着什么。我完全了解它在标准ASP.NET页面中的日常使用,它表明用户是 将数据提交回服务器端。见Page:IsPostBack Property
但是给出了这个HTML
<html>
<body>
<form method="post" action="default.aspx">
<input type="submit" value="submit" />
</form>
</body>
</html>
单击“提交”按钮时,将调用页面Page_Load方法,但Page.IsPostBack返回false。我不想添加runat=server
。
如何区分首次加载的页面与客户点击提交引起的请求之间的区别?
更新
我添加了<input type="text" value="aa" name="ctrl" id="ctrl" />
所以Request.Form有一个元素,而Request.HTTPMethod是POST,但IsPostBack仍然是假的?
答案 0 :(得分:12)
检查Request.Form集合以查看它是否为非空。只有POST才会在Request.Form集合中包含数据。当然,如果没有表单数据,那么请求与GET无法区分。
对于标题中的问题,当请求是来自服务器端表单控件的POST时,IsPostBack设置为true。只使你的表单成为客户端,否则就会失败。
答案 1 :(得分:6)
执行此操作的一种方法是扩展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);
}
}
}
答案 2 :(得分:1)
在您的问题中包含的示例中,没有涉及的视图状态;服务器无法将此请求链接到页面的先前请求并将它们视为一个单元。导致单击按钮的请求看起来就像进入服务器的任何其他随机请求一样。
答案 3 :(得分:1)
通常情况下,您可以将PostBack视为以下组合:
这不是100%万无一失的,它没有考虑任何类型的任何状态(即使你不知道它也可能是你想要的)但它是帖子,返回到当前页面。
答案 4 :(得分:0)
您可以检查标题以查看输入控件是否返回值(使用Request.Forms作为tvanfosson指出)。但是,真正重要的问题是为什么不想要添加runat = server。 ASP.NET(MVC除外)实现的整个页面处理大小取决于通过服务器处理页面输出以设置适当的回调客户端代码等。