【问题标题】:Fire Event With Repeater into Repeater使用中继器触发事件​​到中继器
【发布时间】:2011-10-03 19:19:03
【问题描述】:

大家下午好,我正在使用中继器,在该中继器内还有另一个中继器,每个项目都有一个按钮。当我单击这些按钮之一时,asp.net 会返回以下错误:

回发或回调参数无效。启用事件验证 在配置中使用或 在一个页面中。为了安全 目的,此功能验证回发或回调的参数 事件源自最初呈现的服务器控件 他们。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法,以便 注册回发或回调数据以进行验证。

但是当我在我的页面上添加页面指令 EnableEventValidation = "false" 时,没有错误但不会触发我的事件。

如何解决?

【问题讨论】:

  • 发布您的代码,否则您的问题将被关闭。很模糊。

标签: c# asp.net


【解决方案1】:

您是否在每次回发时绑定数据?问题可能源于这样一个事实,即发送事件的Repeater在回发后不再存在,并且每个回发都会创建一个新的Repeater。 这就是事件验证失败的原因,您不能将事件从一个动态创建的控件触发到另一个控件。它必须是同一个控件。

简单的解决方案是仅在第一次加载页面时绑定数据并保持 ViewState 处于启用状态。

所以,在 Page_Load 中:

if(!IsPostBack)
  // Bind Repeater Data here

【讨论】:

  • 现在我将 Bind Repeater 放入验证中,看: if (!Page.IsPostBack) { if (base.VehiclesResponse != null) { List listVehicles = base.VehiclesResponse; List listVehiclesOrdened = listVehicles.OrderBy(x => x.Class).ToList(); rptRatesResponse.DataSource = listVehiclesOrdened; rptRatesResponse.DataBind(); } }
  • 现在,没有返回错误,但是当我在转发器列表中插入事件时不会调用该事件。我在代码隐藏中注册事件 ItemCommand 作为示例如下: objRepeater.ItemCommand +=new RepeaterCommandEventHandler(objRepeater_ItemCommand); void objRepeater_ItemCommand(对象源,RepeaterCommandEventArgs e) { Response.Write("TESTE"); }
  • 请将您页面的代码编辑到问题中,从 cmets 中读取它真的很难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多