asp.net DropDownList二级联动问题

zhangfengyi 2013-10-30 03:29:41
网上搜的二级联动,第一个DropDownList可以,第二个DropDownList不显示,求解,另外getdata文件中有一句writer.IndentChar='',这个空字符串怎样赋值



<script type="text/javascript">
function load(state) {
var drp2 = document.getElementById("Buildings");
for (i=drp2.length;i>=0;i--)
{
drp2.options.remove(i);
}

var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
var oDoc = new ActiveXObject("MSXML2.DOMDocument");
oHttpReq.open("POST", "getData.aspx?state=" + state, false);
oHttpReq.send("");

result = oHttpReq.responseText;
oDoc.loadXML(result);
items1 = oDoc.selectNodes("//AREA/Table/Id");
items2 = oDoc.selectNodes("//AREA/Table/Buildingsname");

var itemsLength = items1.length;
alert(state);
for (i = 0; i < itemsLength; i++) {
//将小类的类名和编号赋予DropDownList2
var newOption = document.createElement("OPTION");
newOption.text = items2[i].text;
newOption.value = items1[i].text;
drp2.options.add(newOption);
}
}
window.onload = function() { load('1'); }
</script>

C#:

protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
//建立数据源加载第一个DropDownList,也可以默认加载第二个
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["connectionString"]);
SqlDataAdapter da = new SqlDataAdapter("select id,areaname from area", con);
DataSet ds = new DataSet();
da.Fill(ds);
this.area.DataSource = ds;
this.area.DataTextField = "areaname";
this.area.DataValueField = "id";
this.area.DataBind();
//这里是绑定客户端事件,当第一个DropDownList的选项改变时激发下面的事件onchange, 这个事件将调一个客户端load()
this.area.Attributes.Add("onchange", "load(this.options[this.selectedIndex].value)");
//this.area.Attributes.Add("onchange", "return alert('OK');");
//this.Response.Write("this.options[this.selectedIndex].value");
//RegisterStartupScript("", "<script>alert('OK!')</script>");
}
}

#region web form designer generated code
protected override void OnInit(EventArgs e)
{
//CODEGEN:该调用是asp.net web窗体设计器所必须的
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法,不要使用代码编辑器修改此方法的内容
/// </summary>
/// <returns></returns>
///
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion

//private void Button1_Click(object sender, System.EventArgs e)
//{
// txtAddress.Text = this.Request.Form["Buildings"].ToString();
//}

getdata:

protected void Page_Load(object sender, EventArgs e)
{
int areaid=int.Parse(Request["state"].ToString());
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["connectionString"]);
SqlDataAdapter da = new SqlDataAdapter("select id,Buildingsname from Buildings where areaid=" + areaid, con);
DataSet ds = new DataSet("Buildingsname");
da.Fill(ds);

XmlTextWriter writer = new XmlTextWriter(Response.OutputStream,Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.Indentation = 4;
writer.IndentChar='';
writer.WriteStartDocument();
ds.WriteXml(writer);
writer.Flush();
Response.End();
}
#region web form Designer generated code
protected override void OnInit(EventArgs e)
{
//CODEGEN:该调用是asp.net web窗体设计器所必需的

InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load+=new System.EventHandler(this.Page_Load);
}
#endregion
...全文
449 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gclol 2013-11-01
  • 打赏
  • 举报
回复
引用 11 楼 zhangfengyi 的回复:
[quote=引用 10 楼 gclol 的回复:] 关于XmlTextWriter的IndentChar属性我之前说的有错误,不用'\t',因为你已经设置Indentation为4了,所以只要将IndentChar设为' '就可以
设为''的话报此错误[/quote]不是空字符,那是个空格
zhangfengyi 2013-11-01
  • 打赏
  • 举报
回复
引用 8 楼 gclol 的回复:
javascript load()方法里 items1 = oDoc.selectNodes("//AREA/Table/Id"); items2 = oDoc.selectNodes("//AREA/Table/Buildingsname"); OK 这两行的 AREA 改成 Buildingsname
除了改AREA外,还有Table/Id中的Id改成id,这里是区分大小写的
zhangfengyi 2013-11-01
  • 打赏
  • 举报
回复
引用 10 楼 gclol 的回复:
关于XmlTextWriter的IndentChar属性我之前说的有错误,不用'\t',因为你已经设置Indentation为4了,所以只要将IndentChar设为' '就可以

设为''的话报此错误
gclol 2013-11-01
  • 打赏
  • 举报
回复
关于XmlTextWriter的IndentChar属性我之前说的有错误,不用'\t',因为你已经设置Indentation为4了,所以只要将IndentChar设为' '就可以
zhangfengyi 2013-11-01
  • 打赏
  • 举报
回复
这是result获取信息截图
gclol 2013-11-01
  • 打赏
  • 举报
回复
javascript load()方法里 items1 = oDoc.selectNodes("//AREA/Table/Id"); items2 = oDoc.selectNodes("//AREA/Table/Buildingsname"); 这两行的 AREA 改成 Buildingsname
zhangfengyi 2013-11-01
  • 打赏
  • 举报
回复
引用 5 楼 gclol 的回复:
别用IndentChar属性了,用IndentChars,设为"\t",这个属性用来实现xml文档的缩进。 function load(state) { var drp2 = document.getElementById("Buildings"); for (i=drp2.length;i>=0;i--) 是不是应该从drp2.length-1开始吧 { drp2.options.remove(i); }
"\t"解决了空字符串的问题,但还是没有给第二个下拉列表赋值
gclol 2013-11-01
  • 打赏
  • 举报
回复
通过ajax动态生成页面元素就是这样,把EnableEventValidation设为false就不会报这个错,但是好像这种做法不太高明,还有没有更合理的解决办法我也不知道。 而且你要想取第二个下拉框的值也不能直接在后台代码里取,你要给第二个下拉框的name属性设一个值,然后在Page_Load方法中通过 Request["name属性值"] 去取,首先要判断是否为null,不为空的情况下再通过ToString()得出第二个下拉框的所选值
zhangfengyi 2013-11-01
  • 打赏
  • 举报
回复
这个问题解决了,提交表单时报错

late2never 2013-11-01
  • 打赏
  • 举报
回复
selectchanaged事件就可以啊
u010232129 2013-10-31
  • 打赏
  • 举报
回复
这么多的代码。。
jakinda_fly 2013-10-31
  • 打赏
  • 举报
回复
我也才做过二级联,在网上查了很多资料,后面终于做了出来。我相应的代码放在了上面。你可以去看一下,希望对你有帮助http://download.csdn.net/detail/jakinda_fly/6479933
gclol 2013-10-31
  • 打赏
  • 举报
回复
别用IndentChar属性了,用IndentChars,设为"\t",这个属性用来实现xml文档的缩进。 function load(state) { var drp2 = document.getElementById("Buildings"); for (i=drp2.length;i>=0;i--) 是不是应该从drp2.length-1开始吧 { drp2.options.remove(i); }
chen_ya_ping 2013-10-30
  • 打赏
  • 举报
回复
这个是多么老久的问题了啊,网上的答案一大堆
H_Gragon 2013-10-30
  • 打赏
  • 举报
回复
二级联动你可以在dropdownlist的selectchanaged中把第一个dropdownlist选择的值穿过去绑定另一个的dropdownlist值!

62,039

社区成员

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

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

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

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