ajax三级联动

huangwenquan123 2010-09-10 05:20:57
我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我把他改成数字了也没用!

哪里有问题呢?
大家一般怎么做?
...全文
478 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
cui_win 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jyk 的回复:]
我在写我的联动控件到时候也遇到了这个问题。
我是用一个文本框(也可以是隐藏域或者cookies)来保存用户选择的item的value值。

其实我们并不需要后台识别前台js加的item,只需要知道用户选择了哪个选项就可以了。所以把用户的选择的value保存到文本框里,提交到后台就可以了。

我就是这么解决的。

可以看16楼的连接。
[/Quote]

请问:文本框保存item的value的值的时机是什么? 我在我的注册页面的提交按钮添加一个SaveData的方法,用来保存item的值,但是提交按钮单击了就会把Ajax拼接的数据清空,只用用javascript赋值,才能得到吧。
自然框架 2011-02-28
  • 打赏
  • 举报
回复
我在写我的联动控件到时候也遇到了这个问题。
我是用一个文本框(也可以是隐藏域或者cookies)来保存用户选择的item的value值。

其实我们并不需要后台识别前台js加的item,只需要知道用户选择了哪个选项就可以了。所以把用户的选择的value保存到文本框里,提交到后台就可以了。

我就是这么解决的。

可以看16楼的连接。

自然框架 2011-02-28
  • 打赏
  • 举报
回复
我这里也有一个n级联动的,有源码,有演示。

http://topic.csdn.net/u/20110225/16/1aae774d-e92e-4d1f-9065-61b712063c28.html?seed=138
阿非 2010-09-11
  • 打赏
  • 举报
回复
办法不是告诉你了么
浑沌滴年代 2010-09-11
  • 打赏
  • 举报
回复

你的那个下拉列表用的是服务器控件才会出现这样的问题,要做ajax级联的话,最好用html控件。。。
也可以这样理解,页面与ajax调用有关的,都用html控件。。。
huangwenquan123 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sandy945 的回复:]
办法不是告诉你了么
[/Quote]
非哥!那个方法不懂额!
huangwenquan123 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gongsun 的回复:]
用 select ,不用dropdownlist看看。
[/Quote]select也是一样!市区的那个下拉框由于是用ajax拼接的,回发后值没有了,取不到值才抱错
只能用updatepanel了吗?还有其他办法不!
majingjing87 2010-09-10
  • 打赏
  • 举报
回复
使用JS吧!
wuyq11 2010-09-10
  • 打赏
  • 举报
回复
<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)
{

}
}
东海凌波 2010-09-10
  • 打赏
  • 举报
回复
能用代码解决又不影响效率的还是用代码吧,JS由跨浏览器的问题,太麻烦。
凤凰涅檠 2010-09-10
  • 打赏
  • 举报
回复
出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。


把它啃掉。。。
gongsun 2010-09-10
  • 打赏
  • 举报
回复
用 select ,不用dropdownlist看看。
gongsun 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sandy945 的回复:]
自己写个类,继承自 DropDownList

别的不用写,然后使用这个自定义的类就可以了。
[/Quote]

这么YD ....
xinbada1985 2010-09-10
  • 打赏
  • 举报
回复
一般都用第一种方法,或者不用ajax写.
阿非 2010-09-10
  • 打赏
  • 举报
回复
自己写个类,继承自 DropDownList

别的不用写,然后使用这个自定义的类就可以了。
wa6190064 2010-09-10
  • 打赏
  • 举报
回复
不懂,帮你顶

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧