在现在的网站中用到了省市联动,用的是ajax.dll的ajax方式
这是页面js和控件定义
<script language="javascript">
//城市------------------------------
function cityResult()
{
var city=document.getElementById("<% =ddlProvince.ClientID%>");
//alert (city.value);
b2bmajax.GetCityList(city.value,get_city_Result_CallBack);
//alert (city .value);
}
function get_city_Result_CallBack(response)
{
if (response.value != null)
{
//debugger;
document.all("<% =ddlCity.ClientID%>").length=0;
var ds = response.value;
if(ds != null && typeof(ds) == "object" && ds != null)
{
//alert ("a");
for(var i=0; i<ds.Rows.length; i++)
{
//alert ("b");
var name=ds.Rows[i].province_city;
var id=ds.Rows[i].ID;
document.all("<%=ddlCity.ClientID%>").options.add(new Option(name,id));
}
}
}
return
}
function getData()
{
var province=document.getElementById("ddlProvince");
var pindex = province.selectedIndex;
var pValue = province.options[pindex].value;
var pText = province.options[pindex].text;
var city=document.getElementById("ddlCity");
var cindex = city.selectedIndex;
var cValue = city.options[cindex].value;
var cText = city.options[cindex].text;
/*var area=document.getElementById("DropDownList3");
var aindex = area.selectedIndex;
var aValue = area.options[aindex].value;
var aText = area.options[aindex].text;*/
var txt=document.getElementById("TextBox1");
document.getElementById("<%=TextBox1.ClientID%>").innerText="省:"+pValue+"|"+pText+"市:"+aText;
}
</script>
所在省:
<asp:DropDownList ID="ddlProvince" runat="server" DataValueField="id"
DataTextField="province_city">
</asp:DropDownList>
所在市:
<asp:DropDownList ID="ddlCity" runat="server" DataValueField="id" DataTextField="province_city">
</asp:DropDownList>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="b_click" />
这是页面代码
protected void Page_Load(object sender, EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(b2bmajax));
if (!IsPostBack)
{
B2BM.Core.Area area = new B2BM.Core.Area();
ddlProvince.DataSource = area.Get(0);
ddlProvince.DataBind();
this.ddlProvince.Attributes.Add("onclick", "cityResult();");
//this.ddlCity.Attributes.Add();
}
}
protected void b_click(object sender, EventArgs e)
{
Response.Redirect("default.aspx?id="+ddlProvince .SelectedValue);
}
protected override void Render(HtmlTextWriter writer)
{
ClientScriptManager cs = Page.ClientScript;
cs.RegisterForEventValidation(ddlProvince.UniqueID, "province");
cs.RegisterForEventValidation(ddlCity.UniqueID, "city");
base.Render(writer);
}
可是一点提交就
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Lucida Console";font-size: .9em}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
“/”应用程序中的服务器错误。
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用
<%@ Page EnableEventValidation="true" %>
启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用
ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
说明: 执行当前
Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息:
System.ArgumentException: 回发或回调参数无效。在配置中使用 <pages
enableEventValidation="true"/> 或在页面中使用 <%@ Page
EnableEventValidation="true" %>
启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用
ClientScriptManager.RegisterForEventValidation
方法来注册回发或回调数据以进行验证。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[ArgumentException: 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。]
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +2132728
System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
System.Web.UI.WebControls.DropDownList.LoadPostData(String postDataKey, NameValueCollection postCollection) +55
System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1194
1.将<pages enableEventValidation="true"/>改为<pages enableEventValidation="false"/>,但是这样取不到客户端增加的值。
2、在web.config中添加如下语句:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/>
解释:2因为 POSTBACK 如果不采用 UTF-8 编码, JAVASCRIPT 会认为有问题。
其实只改 requestEncoding="utf-8" 就可以了
在页首,把那个<pages enableEventValidation="true"/>里的true改为false试试看。这种问题我以前也出现过。