我们如何将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
。
答案 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变得有用。它包含一个更通用的方法来确定哪个控件导致了回发。