我的做无刷新三级联动,根本上实现了,有一点小BUG。就是选择省份的时间,城市加载的是对的,而县城只加载
城市下拉列表中城市下的一个县城,这个问题该如何解决?
还有就是不管我怎么选择省份,城市和县城,在CS代码接收时,城市和县城永远都是第一次页面加载时的城市和县城,
而我选择时页面上无刷新连动也实现了。怎么能取得连动后所选择的城市和县城?
string province=this.ddlProvince.SelectedText.Trim();
string city=this.ddlCity.SelectedText.Trim();
string town=this.ddlTown.SelectedText.Trim();
省份取得的是对的,而城市和县城永远都是第一次页面加载时的城市和县城.而页面上显示的是无刷新选择后
的省份,城市和县城.如何做才能取得选择后的城市和县城?
城市下拉列表中城市下的一个县城,这个问题该如何解决?
还有就是不管我怎么选择省份,城市和县城,在CS代码接收时,城市和县城永远都是第一次页面加载时的城市和县城,
而我选择时页面上无刷新连动也实现了。怎么能取得连动后所选择的城市和县城?
string province=this.ddlProvince.SelectedText.Trim();
string city=this.ddlCity.SelectedText.Trim();
string town=this.ddlTown.SelectedText.Trim();
省份取得的是对的,而城市和县城永远都是第一次页面加载时的城市和县城.而页面上显示的是无刷新选择后
的省份,城市和县城.如何做才能取得选择后的城市和县城?
Request.Form[ddlTown.UniqueID]
通过Request.Form获取提交给服务器的值
ddlCity.Attrbutes.add("onchange","js方法(this.selectedvalue,"ddlTown")");
js方法里每次触发onchange事件就会把ddlCity.length=0,ddlTown.length=0。
也就是清空后在重新添加当前省份下的所有城市,当前城市下的所有县城。
请问怎么样才能在CS代码里正确取到ddlCity的Text值和ddlTown的Text值。另有一问题就是,我每次选择省份时,城市列表框加载的内容是对的,而当前城市下的县城只有一个,
要选择一下别的城市在选择这个城市,县城列表的内容才会全部加载。
我该如何做?数据表的结构如下:
area_id area_name area_parentid
主键 区域名 上一级id,如果没有上一级就为0。比如中国的上一级id为0。
就是选择省份的时间,城市加载的是对的,而县城只加载
城市下拉列表中城市下的一个县城,这个问题该如何解决?
是什么意思?是不是省份变了,城市变了,县城仍然是pageload是的数据?
你可一在省份改变的事件中改写县城的数据,用省份默认的城市所有的县城数据填充
你选择江西省时,城市如果是南昌排在第一,县城下拉列表则以南昌为城市所有的县城数据填充
看看这个,有完整代码,程序逻辑为N级联动
<script language="javascript" type="text/javascript">
<!--
// ACLOUD 常用JS函数
function getBid(s)
{
return document.getElementById(s);
}
function getBmc(s)
{
return document.getElementsByName(s);
}
//显示分类列表
function showNext(sid,obj)
{
if(sid==null || sid=="" || sid.length<1)
{
return;
}
var slt =getBid(obj);
var v = _Default.getNextClass(sid).value; // 类的名称 if (v != null)
{
if(typeof(v) == "object")
{
slt.length = 0;
slt.options.length = 0;
var txt = v.Rows[0].Area_name; //这个地方需要注意区分大小写
var vol = v.Rows[0].Area_id;
slt.options.add(new Option(txt,vol));
if(obj=="ddlCity")
{
getBid("ddlTown").options.length=0;
var txt = v.Rows[0].Area_name; //这个地方需要注意区分大小写
var vol = v.Rows[0].Area_id;
getBid("ddlTown").options.add(new Option(txt,vol));
}
for(var i=1; i<v.Rows.length; i++)
{
var txt = v.Rows[i].Area_name; //这个地方需要注意区分大小写
var vol = v.Rows[i].Area_id; //跟dataset表的列名称要一致
slt.options.add(new Option(txt,vol));
}
}
}
return;
}
function change()
{
var index=document.form.ddlcountry.selectedIndex;
if(document.form.ddlcountry.options[index].text == "中国")
{
china.style.display = 'block';
other.style.display = 'none';
getBid("RFVCity").Enabled=false;
}
else
{
other.style.display = 'block';
china.style.display = 'none';
//document.form.getElementById("RFVCity").Enabled=true;
}
}
-->
</script>
</head>
<body>
<form id="form" name="form" runat="server">
<table>
<tr>
<td>国家:<select id="ddlcountry" runat="server" name="ddlcountry" onchange="change()">
<option value="01" selected>中国</option>
<option value="02">其它</option>
</select><%--<asp:DropDownList ID="ddlcountry" runat="server">
<asp:ListItem Value="01">中国</asp:ListItem>
<asp:ListItem Value="02">其它</asp:ListItem>
</asp:DropDownList>--%></td>
</tr>
<tr>
<td><div id="china">省份:<asp:DropDownList ID="ddlProvince" runat="server"></asp:DropDownList><br />
城市:<asp:DropDownList ID="ddlCity" runat="server"></asp:DropDownList><br />
县城:<asp:DropDownList ID="ddlTown" runat="server"></asp:DropDownList></div></td>
</tr>
<tr>
<td><div id="other" style="display:none">城市:<asp:TextBox ID="txtCity" runat="server"></asp:TextBox>
</div></td>
</tr>
<tr>
<td>
<asp:Button ID="btnOK" runat="server" Text="提交" OnClick="btnOK_Click" /></td>
</tr>
</table>
</form>
</body>CS代码如下:
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
if (!this.IsPostBack)
{
this.bindMsg();
}
} /// <summary>
/// 获取下级分类
/// </summary>
[AjaxPro.AjaxMethod]
public Area_ClassDS.Area_ClassDataTable getNextClass(string cid)
{
//页面获取的 列名称 必须跟这个一同样 而且区分大小写 一般都是这个地方容易疏忽了
//所以二级分类没变化
try
{
Area_ClassTableAdapter ata = new Area_ClassTableAdapter();
return ata.GetDataByArea_ParentID(cid);
}
catch
{
//throw;
return null;
}
} /// <summary>
/// 数据邦定
/// </summary>
public void bindMsg()
{
//第一个
Area_ClassTableAdapter ata = new Area_ClassTableAdapter();
this.ddlProvince.DataSource = ata.GetDataByArea_ParentID("01");
this.ddlProvince.DataTextField = "Area_name"; //邦定的显示字段
this.ddlProvince.DataValueField = "Area_id"; //邦定的隐藏字段
this.ddlProvince.DataBind();
if (this.ddlProvince.DataSource != null)
{
this.ddlProvince.Attributes.Add("onchange", "showNext(ddlProvince.options[selectedIndex].value,'ddlCity');");
} //可以先判断 DropDownList.SelectedItem.Value
//第二个 this.ddlCity.DataSource = ata.GetDataByArea_ParentID(this.ddlProvince.SelectedValue);
this.ddlCity.DataTextField = "Area_name";
this.ddlCity.DataValueField = "Area_id";
this.ddlCity.DataBind();
if (this.ddlCity.DataSource != null)
{
this.ddlCity.Attributes.Add("onchange", "showNext1(ddlCity.options[selectedIndex].value,'ddlTown');");
} //第三个
this.ddlTown.DataSource = ata.GetDataByArea_ParentID(this.ddlCity.SelectedValue);
this.ddlTown.DataTextField = "Area_name";
this.ddlTown.DataValueField = "Area_id";
this.ddlTown.DataBind();
} protected void btnOK_Click(object sender, EventArgs e)
{
Response.Write(this.ddlProvince.SelectedItem.Text);
Response.Write(this.ddlCity.SelectedItem.Text);
Response.Write(this.ddlTown.SelectedItem.Text);
//Response.Write(this.ddlProvince.SelectedValue + ",");
//Response.Write(this.ddlCity.SelectedValue + ",");
//Response.Write(this.ddlTown.SelectedValue);
//Response.Write(Request.Form["ddlProvince"]+"<br>");
//Response.Write(Request.Form["ddlCity"]+"<br>");
//Response.Write(Request.Form["ddlTown"]);
}我的问题就是上面的问题
而我选择城市时县城才加载对。我要问的问题就是我选择省份时城市和县城列框框怎么改才能加载正确,
还有就是怎么能正确取的城市和县城列表框的值。
我用的是.net 2005工具
表结构在4楼,数据源是强类型数据集,如下:
select * from Area_Class where area_parentid = @area_parentid