我在usercontrol中有以下方法
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Page.ClientScript.RegisterForEventValidation(DataList1.UniqueID);
if (DataList1.Items.Count > 0)
{
foreach (DataListItem item in DataList1.Items)
{
Page.ClientScript.RegisterForEventValidation(item.UniqueID);
foreach (Control ctrl in item.Controls)
{
if (ctrl is Button)
{
Button btn = ctrl as Button;
Page.ClientScript.RegisterForEventValidation(btn.UniqueID, btn.CommandArgument);
}
}
}
}
}
我正在尝试让页面停止向我提供“无效的回发或回调参数。在配置中使用事件验证或在页面中<%@ Page EnableEventValidation =”true“%>”时出现错误在Datalist中进行选择(使用数据绑定命令参数单击按钮)。我试图为提交控件注册事件验证,但我无法使其正常工作。
有人使用这种方法有任何成功吗?我真的不想禁用页面的事件验证。
答案 0 :(得分:0)
发现问题根本与EventValidation没有关系,通常错误消息一如既往地有用。
删除页面回发事件上的数据绑定为我排序问题就像这样。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//do datbinding
}
}
答案 1 :(得分:0)
通常,当您在aspx文件中放置验证器时,您告诉验证器哪个控件,例如与之关联的文本框。但是,假设您有一个CustomValidator,它会检查您是否输入了手机号码。在“手机”的“家庭电话”中。
此验证程序与特定文本字段无关。因此,不要在CustomValidator上设置ControlToValidate属性,而是将其留空,然后在两个控件上调用RegisterForEventValidation。
因此该函数只是告诉框架特定控件包含应该验证的数据。每当您在运行时填写(或清除)控件时,框架都会使用它来设置javascript事件以运行客户端验证。
所以你不应该注册事件验证的按钮,这是没有意义的。如果您已经有一个验证器,那么也没有理由为事件验证注册文本字段,其中ControlToValidate指向该文本框。
您遇到的问题可能与将按钮与特定“验证组”关联,或者是否在按钮上设置“原因验证”更相关。 还要记住,您还应该检查回发事件处理程序中的验证。
Page.Validate();
if (!Page.IsValid) return;
或
Page.Validate("ValidationGroup");
if (!Page.IsValue("validationGroup")) return;