我DropDownList做了省市联动,然后点击button提交,结果一直提示这个错误
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。jquery代码 $("#City_Area>option").remove();
        var prov = $("#Province_Area option:selected").text();
        $.ajax({
            url:"/UserBackstage/Province.xml",
            datatype:"xml",
            cache:false,
            success:function(result)
            {
                $(result).find("province[label="+prov+"]>city").each(function(){
                    var city = $(this).attr("label");
                    var cityvalue = $(this).attr("value");
                    $("#City_Area").append("<option value='"+cityvalue+"'>"+city+"</option>");
                })
            }
        })
网上找到的方法
1、在页面的<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 中添加 EnableEventValidation="false" 就可以了。(首先考虑的)2、是Form嵌套,一个页面只能有一个Form,仔细检查代码就可以解决。3、如果页面含有 DropDownList 或 ListBox这样的控件,可能以下原因造成:    3.1 在下拉菜单中使用ajax,常见于省市联动菜单,可能是由于在aspx页面赋给了下拉菜单初始Item值,在事件回发时提示该错误,将下拉菜单初始Item值删除,在绑定事件中添加Item项。    3.2 原因是 DropDownList 控件的ListItem 的Value 属性 包含汉字.只要将Value 改为英文或数字的就行了.最好在web.config中添加如下语句:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/>都试过了!没用 
3.2我把他改成数字了也没用!哪里有问题呢?
大家一般怎么做?

解决方案 »

  1.   

    自己写个类,继承自 DropDownList 别的不用写,然后使用这个自定义的类就可以了。
      

  2.   

    一般都用第一种方法,或者不用ajax写.
      

  3.   

    用 select ,不用dropdownlist看看。
      

  4.   

    出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
    把它啃掉
      

  5.   

    <asp:ScriptManager ID="ScriptManager1" runat="server">
      </asp:ScriptManager>
      <div>
      <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
      <asp:DropDownList ID="ddlLB" runat="server" Width="15%" AutoPostBack="True" OnSelectedIndexChanged="ddlLB_SelectedIndexChanged">
      </asp:DropDownList>
      <asp:DropDownList ID="ddlChild" runat="server" Width="20%">
      </asp:DropDownList>
      </ContentTemplate>
      </asp:UpdatePanel>
      </div>   
    protected void ddlLB_SelectedIndexChanged(object sender, EventArgs e)
      {
      if(this.ddlLB.SelectedValue!=null)
      {  }
      }
      

  6.   

    select也是一样!市区的那个下拉框由于是用ajax拼接的,回发后值没有了,取不到值才抱错
    只能用updatepanel了吗?还有其他办法不!
      

  7.   


    你的那个下拉列表用的是服务器控件才会出现这样的问题,要做ajax级联的话,最好用html控件
    也可以这样理解,页面与ajax调用有关的,都用html控件
      

  8.   

    我这里也有一个n级联动的,有源码,有演示。http://topic.csdn.net/u/20110225/16/1aae774d-e92e-4d1f-9065-61b712063c28.html?seed=138
      

  9.   

    我在写我的联动控件到时候也遇到了这个问题。
    我是用一个文本框(也可以是隐藏域或者cookies)来保存用户选择的item的value值。其实我们并不需要后台识别前台js加的item,只需要知道用户选择了哪个选项就可以了。所以把用户的选择的value保存到文本框里,提交到后台就可以了。我就是这么解决的。可以看16楼的连接。
      

  10.   


    请问:文本框保存item的value的值的时机是什么? 我在我的注册页面的提交按钮添加一个SaveData的方法,用来保存item的值,但是提交按钮单击了就会把Ajax拼接的数据清空,只用用javascript赋值,才能得到吧。