伙计们,我的asp.net 3.5应用程序中有一个usercontrol,我在按钮点击事件上传递一些纯文本。按钮位于usercontrol中。但是当我解雇事件时,我收到以下错误;
无效的回发或回调参数。 使用启用事件验证 在配置或<%@ Page EnableEventValidation =“true”%>在一个 页。为安全起见,这个 功能验证参数 回发或回调事件源自 从服务器控制那个 最初渲染它们。如果数据 是有效的和预期的,使用 ClientScriptManager.RegisterForEventValidation 注册方法 回发或回调数据 验证
当我将EnableEventValidation =“false”设置为web表单页面时就像打击一样。它会引发事件;
<%@ Page EnableEventValidation="false" %>
但我认为设置那个假不应该是个好主意。那么,这里的替代方案是什么?有错误说 '使用ClientScriptManager.RegisterForEventValidation方法来注册回发或回调数据以进行验证。 '但是我要在哪里注册那个东西?谢谢!
另外,我在usercontrol中使用了一些AjaxControlToolkit控件和一些jquery东西。
答案 0 :(得分:3)
ASP.NET 2.0事件验证的问题在于它是全部或全部,并且有点沉重。我读了一篇article 来解释你应该在这里做些什么。
基本上,您需要使用事件验证引擎注册用户控件的子控件。
C#
protected override void Render(HtmlTextWriter writer)
{
// Register controls for event validation
foreach (Control c in this.Controls)
{
this.Page.ClientScript.RegisterForEventValidation(
c.UniqueID.ToString()
);
}
base.Render(writer);
}
VB
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
For Each aControl As Control In Me.Controls
Me.Page.ClientScript.RegisterForEventValidation(aControl.UniqueID.ToString)
Next aControl
MyBase.Render(writer)
End Sub
现在这可能无法解决您的问题,因为我不确定您是如何返回字符串的。另一个article解释了事件验证是控件的唯一ID和它可以传回的所有值的组合。如果您使用按钮的command
值来传递文本,则可能无法执行此任务。
如果导致问题的事件是单击,则注册用户控件的控件应该可以解决问题。
答案 1 :(得分:2)
尝试
if (!Page.IsPostBack)
在datagrid中加载和绑定数据之前
答案 2 :(得分:1)
在我的情况下,我试图更新page_load
上的GridViews数据源,我忘了检查请求是否是回发,因此我的源代码试图更改并抛出此错误。一旦我做了回复检查,它工作正常。希望这可以帮助将来的某个人。
if (Page.IsPostBack == false)
{
this.sqlObj = new SqlServer(ConfigurationManager.ConnectionStrings["PdfReceiverConnectionString"].ToString());
this.populateDataGrid();
}
答案 3 :(得分:0)
您可以将其保持启用状态,然后注册您的控件以进行事件验证。在PreRender或Render页面生命周期中添加以下调用,然后您的控件应该无需关闭eventValidation即可运行:
Page.ClientScript.RegisterForEventValidation(this.UniqueID);
答案 4 :(得分:0)
检查您的HTML,嵌套在“标记”中也会导致