代码之家  ›  专栏  ›  技术社区  ›  Dead account

IsPostback实际上是什么意思?

  •  7
  • Dead account  · 技术社区  · 16 年前

    我想知道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.ispostback返回false。我不想补充 runat=server .

    如何区分第一次加载的页面和客户机点击Submit引起的请求之间的区别?

    更新
    我加入进来了 <input type="text" value="aa" name="ctrl" id="ctrl" /> 那么request.form有一个元素,request.httpmethod是post,但是ispostback仍然是false?

    5 回复  |  直到 12 年前
        1
  •  6
  •   Dead account    16 年前

    一种方法是扩展ASP.NET页类,“重写”ispostback属性,并让所有页从扩展页派生。

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

    检查request.form集合是否为非空。只有日志在request.form集合中才会包含数据。当然,如果没有表单数据,那么请求与GET是不可区分的。

    对于标题中的问题,当请求是来自服务器端表单控件的日志时,ispostback设置为true。只让你的表单成为客户端,这是失败的。

        3
  •  1
  •   Fredrik Mörk    16 年前

    在包含在问题中的示例中,不涉及视图状态;服务器无法将此请求链接到页面的上一个请求并将其作为一个单元来处理。点击按钮后的请求看起来像是其他任何进入服务器的随机请求。

        4
  •  1
  •   Kris    16 年前

    通常,您可以将回发视为以下各项的组合:

    1. HTTP请求方法等于“post”
    2. HTTP头HTTP引用等于当前URL

    这不是100%的万无一失,它不考虑任何形式的状态(即使你不知道,你也可能想要),但它是一个 邮递 , 后面 到当前页。

        5
  •  0
  •   Mark Brittingham    16 年前

    你可以检查邮件头看看 输入 控件正在返回一个值(使用Tvanfosson指出的request.forms)。然而,真正重要的问题是为什么你会 要添加runat=server。由ASP.NET(MVC除外)实现的整个页面处理体系结构依赖于通过服务器处理页面输出,以便为回调设置适当的客户端代码等。