在http模块的gridview中获取图像按钮点击事件的参考

时间:2012-02-14 22:12:20

标签: asp.net httpmodule

我们如何将Click ImageButton内的GridView事件传递给httpsodule 对于linkbutton,我这样做:

if (request.Form.GetValues("__EVENTTARGET") != null)
{

    //If it's a link button execute we can directley check for the params 
    if (request.Params.Get("__EVENTTARGET").Contains("xyz"))
    {
        //some Code
    }

这不适用于ImageButton

2 个答案:

答案 0 :(得分:0)

如果您尝试将事件附加到gridview中的按钮,我可能会在您的基页上建议prerender事件解析页面上的所有网格视图(使用递归的findcontrol算法)并查找任何图像按钮,如果你找到一个你应该能够附加一个事件。

编辑: 我在下面使用类似的东西:

 public abstract class AmendmentPopUpWindow : BaseMasterPlanPage
    {
        // override this method if the correct save controls arent being hidden in the popups
        public virtual IEnumerable<WebControl> SaveControls
        {
            get { return Controls.All().OfType<WebControl>().Where(c => c.ID.ToLower().Contains("save")); }
        }

        protected override void OnPreRender(EventArgs e)
        {
            if (WebConfiguration.Global_EnableAmendments && SystemVersion.HasValue)
            {
                foreach (var control in Controls.All())
                {
                    if (control is RadioButton || control is TextBox || control is DropDownList || control is RadComboBox || control is CheckBox || control is CheckBoxList ||
                        control is RadEditor || control is RadTextBox || control is RadNumericTextBox)
                    {
                        var webControl = control as WebControl;
                        webControl.Enabled = false;
                        webControl.ForeColor = Color.Gray;
                    }
                }

                foreach (var saveControl in SaveControls)
                    saveControl.Visible = false;
            }

            base.OnPreRender(e);
        }

编辑:.All()是一种扩展方法,定义如下(从here被盗)

public static IEnumerable<Control> All(this ControlCollection controls)
{
    foreach (Control control in controls)
    {
        foreach (Control grandChild in control.Controls.All())
            yield return grandChild;

        yield return control;
    }
}

答案 1 :(得分:0)

ImageButtons在其名称中有一个额外的准属性,用于标识鼠标坐标(X和Y)。

因此,要查找ImageButton的名称,您应该遍历已发布的参数,并找到以.x.y结尾的参数:

foreach (string item in request.Form)
{
    if (item.EndsWith(".x") || item.EndsWith(".y"))
    {
        var controlName = item.Substring(0, item.Length - 2);
        // some code here
    }
}

你也可以使this answer变得有用。它包含一个更通用的方法来确定哪个控件导致了回发。