回发或回调参数无效。(三级无刷新引发)

lucky313 2007-12-21 01:35:24
小弟最近在看国省市和年月日的三级js无刷新..

如果把enableEventValidation设为false``服务器端则拿不到值 不知大伙是怎么解决这个问题的呢`看到有人说直接在onchange调用js方法。但还是行不通`所以上来麻烦大家了。


HTML Code:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<% =strAreaData %>
<script type="text/javascript">
function changeprovince()
{
document.all("<% =ddlProvince.ClientID %>").length = 0;
document.all("<% =ddlProvince.ClientID %>").options[0] = new Option('选择省','0');
document.all("<% =ddlCity.ClientID %>").length = 0;
document.all("<% =ddlCity.ClientID %>").options[0] = new Option('选择城市','0');
var oneid=document.all("<% =ddlCountry.ClientID %>").value;
var i;
for (i=0;i < onecount; i++)
{
if (subcat[i][2] == oneid)
{

document.all("<% =ddlProvince.ClientID %>").options[document.all("<% =ddlProvince.ClientID %>").length] = new Option(subcat[i][0], subcat[i][1]);
}
}


}

function changecity()
{
document.all("<% =ddlCity.ClientID %>").length = 0;
document.all("<% =ddlCity.ClientID %>").options[0] = new Option('选择城市','0');
var twoid=document.all("<% =ddlProvince.ClientID %>").value;
var i;
for (i=0;i < onecount1; i++)
{
if (subcat1[i][2] == twoid)
{
document.all("<% =ddlCity.ClientID %>").options[document.all("<% =ddlCity.ClientID %>").length] = new Option(subcat1[i][0], subcat1[i][2]);
}

}
}
function getYear()
{
writeMonth();
}
function getMonth()
{

var year=document.all("<% = ddlYear.ClientID %>").value;
var month=document.all("<%= ddlMonth.ClientID %>").value;

if(year!=""&&month!="")
{
var n = MonHead[month];
if (month ==1 && IsPinYear(year))
{
n++;
}

writeDay(n);
}
else
{
alert("年月不能为空!");
}
}

function writeMonth()
{
for(var i=1;i<count;i++)
{
document.all("<%=ddlMonth.ClientID %>").options[i] = new Option(monthcount[i][0],monthcount[i][1]);
}

}
function writeDay(n) //据条件写日期的下拉框
{
var e = document.all("<%=ddlDay.ClientID %>");
optionsClear(e);
for (var i=1; i<(n+1); i++)
e.options.add(new Option(" "+ i + " 日", i));
}
function IsPinYear(year)//判断是否闰平年
{
return(0 == year%4 && (year%100 !=0 || year%400 == 0));
}
function optionsClear(e)
{
e.options.length = 1;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlCountry" runat="server" AppendDataBoundItems="True">
<asp:ListItem Value="0">请选择国家</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddlProvince" runat="server" >
<asp:ListItem Value="0">全部</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddlCity" runat="server" >
<asp:ListItem Value="0">全部</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddlYear" runat="server" onchange="getYear()">
</asp:DropDownList><asp:DropDownList ID="ddlMonth" runat="server" onchange="getMonth()" >
<asp:ListItem Text="aa" Value="aa"></asp:ListItem></asp:DropDownList><asp:DropDownList ID="ddlDay" runat="server">
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</div>
</form>
</body>
</html>







.cs Code:

using System.Data.OleDb;

public partial class _Default : System.Web.UI.Page
{
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:/area.mdb'";
OleDbCommand cmd = null;
public string strAreaData = "";
protected void Page_Load(object sender, EventArgs e)
{

OleDbConnection cnn = new OleDbConnection(ConnectionString);
cnn.Open();

ddlCountry.Attributes.Add("onchange", "changeprovince()");
ddlProvince.Attributes.Add("onchange", "changecity()");
string strSQL;
strSQL = "select * from area where areaFather=0 ";
cmd = new OleDbCommand(strSQL, cnn);
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cnn);
DataSet ds = new DataSet();
da.Fill(ds);
ddlCountry.DataSource = ds.Tables[0];
ddlCountry.DataTextField = "area";
ddlCountry.DataValueField = "id";
ddlCountry.DataBind();
strAreaData = "<script language = 'JavaScript' type='text/javascript'>var onecount;onecount=0;subcat = new Array();";
strSQL = "select * from area where areaFather<>0";

cmd = new OleDbCommand(strSQL, cnn);
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
int i1 = 0;
while (dr.Read())
{
strAreaData += "subcat[" + i1.ToString() + "] = new Array('" + dr["area"].ToString() + "','" + dr["id"].ToString() + "','" + dr["areaFather"].ToString() + "');";
i1++;

}
dr.Close();
dr.Dispose();
strAreaData += "onecount=" + i1.ToString() + ";";

//添加三级地区
strAreaData += "var onecount1;onecount1=0;subcat1 = new Array();";

strSQL = "select * from area where areaFather<>0";
if (cnn.State == ConnectionState.Closed)
cnn.Open();
cmd.CommandText = strSQL;
cmd.Connection = cnn;
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
int n1 = 0;
while (dr.Read())
{
strAreaData += "subcat1[" + n1.ToString() + "] = new Array('" + dr["area"].ToString() + "','" + dr["id"].ToString() + "','" + dr["areaFather"].ToString() + "');"; n1++;

}
dr.Close();
strAreaData += "onecount1=" + n1.ToString() + ";";
cnn.Close();
strAreaData += " var count =0;monthcount = new Array();";
strAreaData += " MonHead = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];";
int year = DateTime.Now.Year;
for (int i = (year - 30); i < (year + 31); i++)
{
ListItem li = new ListItem(i + " 年", i.ToString());
this.ddlYear.Items.Add(li);
}
for (int i = 0; i < 12; i++)
{
strAreaData += "monthcount[" + (i+1) + "] = new Array('" + (i+1) + "月' ,'" + i + "') ;";
}
strAreaData += "count = " + 13 + ";";
strAreaData += "</script>";

}


protected void Button1_Click(object sender, EventArgs e)
{

Response.Write("<script>alert('" + this.ddlCountry.Items[ddlCountry.SelectedIndex].Text + "')</script>");
Response.Write("<script>alert('" + this.ddlProvince.Items[ddlProvince.SelectedIndex].Text + "')</script>");

}

}


...全文
119 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucky313 2007-12-21
  • 打赏
  • 举报
回复
ghosteryly 太感谢了。。原来是这个意思。。结贴了哈。。谢谢大伙们。谢谢CSDN。。
ghosteryly 2007-12-21
  • 打赏
  • 举报
回复
你的三级
把第二级和第三级的dropdownlist该为HTML控件。
然后加上runat="server" ,然后在 后台 cs代码里用Request.Form["你控件名字"]; 来接收上级的值就可以了。
lucky313 2007-12-21
  • 打赏
  • 举报
回复
楼上的`不知有何更简便的方法呢。小弟刚从事.net这方面好多都不懂的`
lovesupper2008 2007-12-21
  • 打赏
  • 举报
回复
你为什么要这样做呢!我觉得好麻烦啊!
lucky313 2007-12-21
  • 打赏
  • 举报
回复
谢谢你们啊。但是这个和IsPostBack无关啊``
wen01071081 2007-12-21
  • 打赏
  • 举报
回复
你把Page_load里的操作放到if(!Page.IsPostBack){}里试试
LikeCode 2007-12-21
  • 打赏
  • 举报
回复
要不楼主你试试将问题一个个问,看看我能不能答得上.
lucky313 2007-12-21
  • 打赏
  • 举报
回复
不过这个问题用js我觉得会简单很多```但现在这个小问题就是解决不了。郁闷中。。

autopostback就自动回发了啊`那还怎么用js做无刷新啊?
lucky313 2007-12-21
  • 打赏
  • 举报
回复
谢谢楼上的朋友们。。
acupoflife1 2007-12-21
  • 打赏
  • 举报
回复
ajaxpro 解决下吧..
大正他爹 2007-12-21
  • 打赏
  • 举报
回复
autopostback="true"
LikeCode 2007-12-21
  • 打赏
  • 举报
回复
http://www.code-studio.net/CSView.aspx?aid=161全国各省市联动下拉列表
参考一下

62,266

社区成员

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

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

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

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