繁体   English   中英

如果一个asp.net控件的事件没有绑定,那么我应该检查的是什么,按照可能的原因排序?

[英]If an asp.net control's event's aren't binding, what are the things I should check, in order of likly cause?

所以我有一个带有服务器表单的ASP.NET控件,其中有一堆runat="server" ,并在标记中定义了事件。 但是,单击按钮时,没有任何事件发生。 发生回发并且在Page_Load事件中IsPostback为true。

我应该检查一下为什么事件不会发生? 关于他们为什么不受约束的最可能原因是什么?

更新:我已经放弃了这段代码。 当我到达检查这里提到的所有内容时,仍然会发生回传,但没有事件发生,我已经回到以前的稳定状态,我又开始了

这是一种皮肤猫的有趣方式。 你不是在问“我做错了什么”,而是“我可能做错的可能事情是什么”。

有意思,因为我认为它表明你想要自己想象它,但也因为我很难提出建议,没有任何暗示。 有几乎无限的可能性。

如果表单回发,事件将触发。 我认为这是同义词。 如果您没有看到正在调用的事件处理程序,那么您可能正在查找错误的位置。

我发现这种方法在这种情况下很有用。 我从page_load调用它,它向我展示了在调用事件处理程序之前导致事件触发的原因的详细信息。

    /// <summary>
    /// Find which control caused the post back
    /// </summary>
    /// <param name="page"></param>
    /// <returns></returns>
    public static System.Web.UI.Control 
                 GetPostBackControl(System.Web.UI.Page page) {
        Control control = null;
        string ctrlname = page.Request.Params["__EVENTTARGET"];
        if (ctrlname != null && ctrlname != String.Empty) {
            control = page.FindControl(ctrlname);
        }
        // if __EVENTTARGET is null, the control is a button type and we need to 
        // iterate over the form collection to find it
        else {
            string ctrlStr = String.Empty;
            Control c = null;
            foreach (string ctl in page.Request.Form) {
                // handle ImageButton controls ...
                if (ctl.EndsWith(".x") || ctl.EndsWith(".y")) {
                    ctrlStr = ctl.Substring(0, ctl.Length - 2);
                    c = page.FindControl(ctrlStr);
                }
                else {
                    c = page.FindControl(ctl);
                }
                if (c is System.Web.UI.WebControls.Button ||
                         c is System.Web.UI.WebControls.ImageButton) {
                    control = c;
                    break;
                }
            }
        }
        return control;
    }

你说发生了一个PostBack,所以你有没有对你要发射的事件进行某种形式的中断/记录,它永远不会到达那里?

你有机会关掉ViewState吗?

我怀疑你控制生活中有什么问题。
我强烈建议在ASP.Net页面生命周期中学习这个伟大的图表

如果没有在控件中看到代码,您可能会在页面生命周期中的错误点处连接事件或创建控件,因此您要触发的事件创建得太晚而无法触发。

该控件似乎工作为.Net仍然连接ClientSide javascript以进行PostBack。

向我们展示您的代码,我们应该能够进一步提供帮助。

进一步阅读可能会有所帮助:

MSDN:ASP.NET页面生命周期概述

代码会有所帮助,但如果它们是动态创建的,您可能会在页面生命周期的错误阶段创建它们吗? 很难说没有看到一个例子。

我应该检查一下为什么事件不会发生? 关于他们为什么不受约束的最可能原因是什么?

  1. 在Page_Load()或更高版本中创建并添加到控制树的动态控件(应该在Page_Init()中)
  2. 在Page_Load()或更高版本中绑定事件(应该在Page_Init()或标记中)
  3. 在页面或ViewState上禁用ViewState
  4. 在页面生命周期的早期采取一些操作来禁用事件或使其看起来从未发生过
  5. 事件实际上正在运行,你只是没有看到它,因为你正在寻找输出的一些变化,而不是使用调试器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM