在用ajax三级联动时出现下例问题:回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。在网上搜索了一些解决问题的方法,最后在aspx中<%@ Page>中加上EnableEventValidation="false" 解决了问题,并且一定的了解了回发的机制:ListItem里的数据在ViewState里,当你postback后,服务器首先会从ViewState里装载这些项。如果是用js添加这些数据,在2.0中会验证参数是否来源于最初呈现这些事件的服务器控件,我把EnableEventValidation="false"所有选择了不验证,请问:我用ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证怎么操作,希望哪位达人指教,并说明原理好吗?网上找的代码是:    
protected override void Render(HtmlTextWriter writer)
{
    ClientScript.RegisterForEventValidation(ddlPro.UniqueID, this.ToString());
}用了没有效果
ClientScriptManager.RegisterForEventValidation(string,string)中的第一个参数是触发事件的控件名ddlPro.UniqueID,第二个参数是什么呢?应该如何使用RegisterForEventValidation注册回发?

解决方案 »

  1.   

    推荐直接用AJAXPRO算了。你这个注册回调太麻烦了。我以前也用过。有更简单的方式为什么不选择呢?
      

  2.   

    我也遇到这样的问题了! 我也是禁用EnableEventValidation来实现的
      不过我实现的是gridview的行选择,如果我用设计器选择 "选择" 列 然后用 
    _doPostBack('GridView1','Select$1') 进行回调 就不会有问题,但是如果我不添加"选择"列 它就会报楼主那样的错 求解!
      

  3.   

    ClientScriptManager..::.RegisterForEventValidation Method (String)
    Registers an event reference for validation with a unique control ID representing the client control generating the event. Here's a Sample usage
    Usage: When you want to manipulate some server controls using client side javascript.
    Steps:
    Override the page ... register all controls which you want to bypass the event validation for. protected override void Render(HtmlTextWriter writer)
    {
    Page.ClientScript.RegisterForEventValidation(DropDownList1.UniqueID);
    Page.ClientScript.RegisterForEventValidation(DropDownList2.UniqueID);
    Page.ClientScript.RegisterForEventValidation(ListBox1.UniqueID);
    // .... etc
    base.Render(writer);

      
    注意bypass的中文意思,应该了解怎么用了吧~
      

  4.   


    camel0564 别他妈的不懂装懂,浪费大家时间!!!