-------诚心求帮助----if (!Page.IsPostBack)
从网上下载了DropDownList 省市区无刷新三级联动源码,可以正常显示,但增加提交数据按钮后就出现提示:
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
按照网上的方法,想采用在Page_Load中加
if (!Page.IsPostBack)
{
代码
}
的方法解决,请教这个绑定代码怎么写?
附源码部分(还有dll等,不知道怎么上传)
Default.aspx文件里面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableEventValidation="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>51aspx省市区县(含完整数据库)无刷新联动</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlProvince" runat="server">
</asp:DropDownList><asp:DropDownList ID="ddlCity" runat="server">
</asp:DropDownList><asp:DropDownList ID="ddlVilliage" runat="server">
</asp:DropDownList><ajax:CascadingDropDown ID="CascadingDropDown2" runat="server" TargetControlID="ddlProvince" ServicePath="SNWebService.asmx" ServiceMethod="GetProvinceContents" Category="Province" PromptText="请选择省份" LoadingText="省份加载中...">
</ajax:CascadingDropDown>
<ajax:CascadingDropDown ID="CascadingDropDown1" runat="server" ParentControlID="ddlProvince" ServicePath="SNWebService.asmx" ServiceMethod="GetCityContents" Category="City" TargetControlID="ddlCity" PromptText="请选择城市" LoadingText="城市加载中...">
</ajax:CascadingDropDown>
<ajax:CascadingDropDown ID="CascadingDropDown3" runat="server" Category="Villiage" LoadingText="区县加载中..."
ParentControlID="ddlCity" PromptText="请选择区县" ServiceMethod="GetViliageContents"
ServicePath="SNWebService.asmx" TargetControlID="ddlVilliage">
</ajax:CascadingDropDown>
</ContentTemplate>
</asp:UpdatePanel>
<br />
</div> <td style="width: 230px; text-align: center;">
<asp:Button ID="Button1" runat="server" Text="确认提交" onclick="Button1_Click" />
</td>
<td style="width: 230px; text-align: center;">
<asp:Button ID="Button2" runat="server" Text="放弃退出" onclick="Button2_Click" />
</td>
</form>
</body>
</html>
Default.aspx.cs文件:
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox2.Text == string.Empty)
{
Page.ClientScript.RegisterStartupScript(GetType(), "", "alert('请把……!');", true);
}
else
……
}
protected void Button2_Click(object sender, EventArgs e)
{
Response.Write("<script>window.opener=null;window.close();</script>");
this.Dispose();
}
}
SNWebService.cs文件:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
using System.Collections.Generic;
using System.Collections.Specialized;
using AjaxControlToolkit;
using System.Data.SqlClient;
using System.Data;
/// <summary>
/// SNWebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
//该源码
public class SNWebService : System.Web.Services.WebService
{
public SNWebService()
{
//InitializeComponent();
}
/// <summary>
/// 获取1级数据
/// </summary>
/// <param name="knownCategoryValues"></param>
/// <param name="category"></param>
/// <returns></returns>
////-------------------地址-------------------
[WebMethod(EnableSession = true)]
public CascadingDropDownNameValue[] GetProvinceContents(string knownCategoryValues, string category)
{
List<CascadingDropDownNameValue> provinceList = new List<CascadingDropDownNameValue>();
string connectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
SqlConnection sqlConn = new SqlConnection(connectionString);
sqlConn.Open();
string strSql = "Select * From Province";
SqlCommand sqlCmd = new SqlCommand(strSql, sqlConn);
SqlDataReader dtrProvince = sqlCmd.ExecuteReader();
while (dtrProvince.Read())
{
provinceList.Add(new CascadingDropDownNameValue(dtrProvince["Name"].ToString(), dtrProvince["Code"].ToString()));
}
dtrProvince.Close();
sqlConn.Close();
return provinceList.ToArray();
}
/// <summary>
/// 获取2级数据
/// </summary>
/// <param name="knownCategoryValues"></param>
/// <param name="category"></param>
/// <returns></returns>
[WebMethod]
public CascadingDropDownNameValue[] GetCityContents(string knownCategoryValues, string category)
{
StringDictionary provinceList = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
string connectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
SqlConnection sqlConn = new SqlConnection(connectionString);
sqlConn.Open();
string strSql = "Select * From city Where ProvinceId='" + provinceList["Province"] + "'";
SqlCommand sqlCmd = new SqlCommand(strSql, sqlConn);
SqlDataReader dtrCity = sqlCmd.ExecuteReader();
List<CascadingDropDownNameValue> cityList = new List<CascadingDropDownNameValue>();
while (dtrCity.Read())
{
cityList.Add(new CascadingDropDownNameValue(dtrCity["Name"].ToString(), dtrCity["code"].ToString()));
}
dtrCity.Close();
return cityList.ToArray();
}
/// <summary>
/// 获取3级数据
/// </summary>
/// <param name="knownCategoryValues"></param>
/// <param name="category"></param>
/// <returns></returns>
[WebMethod]
public CascadingDropDownNameValue[] GetViliageContents(string knownCategoryValues, string category)
{
StringDictionary cityList = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
string connectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
SqlConnection sqlConn = new SqlConnection(connectionString);
sqlConn.Open();
string strSql = "Select * From area Where CityId='" + cityList["City"] + "'";
SqlCommand sqlCmd = new SqlCommand(strSql, sqlConn);
SqlDataReader dtrViliage = sqlCmd.ExecuteReader();
List<CascadingDropDownNameValue> viliageList = new List<CascadingDropDownNameValue>();
while (dtrViliage.Read())
{
viliageList.Add(new CascadingDropDownNameValue(dtrViliage["Name"].ToString(), dtrViliage["id"].ToString()));
}
dtrViliage.Close();
return viliageList.ToArray();
}
}
[解决办法]
- C# code
if (!Page.IsPostBack) { //代码 databind1(); databind2(); }//上面的代码就是你的绑定方法,如果你的方法是写在按钮里或其它事件里!建议你单独写一个方法,在里面再调用!
[解决办法]
把数据绑定的过程写成方法加到page_load里面的if里面。
形如
- C# code
public void databind(){ con.Open(); SqlCommand cmd = new SqlCommand(strSql,con); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { DropDownList1.Items.Add(new ListItem(dr["status"].ToString(), dr["status_Id"].ToString())); }}