ajax填充下列列表,感觉控件状态好像没有保存,每次页面回传,先要执行js,获取列表后填充到dropdownList,这样就会出下这样的问题:页面第一次加载,下拉列表中都还有选项存在,但中间如果有其它动作,页面回传,那么先在服务器端执行,然后发送到客户端,但这个列表又是空的,因为JS还没有执行,没有到服务器端读取列表,然这个动作需要知道下拉列表是选中的哪一项?所以在服务器端执行时总时报错,说下拉列表项为空,这个问题怎么解决啊明天要交东西,搞了半天,不知道怎么解决,在线急等!
调试欢乐多
在page_loaded事件中调用
Page.RegisterStartupScript("fill", "<script>fill()</script>");也不行,
2:页面回传时不要让它刷新下拉列表
试过了,不可以,找一下,用Request.Form[ddlID].ToString()方法可以获取,
但是新问题又出现了,每次选中的项不能保存,都恢复到页面第一次加时的情形,用什么方法能保存控件状态呢
有一种搞法说用HiddenField控件,但不知道怎么用,还没有用过这个玩意儿
js 要是有ispostback属性就好了
20天之后“问题还是没有解决”,让人怀疑你说的ajax到是个什么东西?
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
this.TextBox1.DataBind();
} protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
this.DropDownList2.Items.Clear();
switch (this.DropDownList1.SelectedValue)
{
case "北京":
this.DropDownList2.Items.Add("天安门广场");
this.DropDownList2.Items.Add("颐和园");
this.DropDownList2.Items.Add("雍和宫");
this.DropDownList2.Items.Add("红螺寺");
break;
case "上海":
this.DropDownList2.Items.Add("崇明岛");
this.DropDownList2.Items.Add("外滩");
this.DropDownList2.Items.Add("万佛阁");
break;
case "香港":
this.DropDownList2.Items.Add("海洋公园");
this.DropDownList2.Items.Add("半岛酒店");
break;
}
}
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
ShowResult();
} protected void Button1_Click(object sender, EventArgs e)
{
try
{
this.Calendar1.SelectedDate = DateTime.Parse(this.TextBox1.Text);
}
catch
{
}
this.Calendar1.Visible = true;
} protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
this.TextBox1.Text = this.Calendar1.SelectedDate.ToShortDateString();
this.Calendar1.Visible = false;
ShowResult();
} void ShowResult()
{
this.Label1.Text = "您选择" + this.TextBox1.Text + "去" + this.DropDownList2.SelectedValue;
UpdatePanel3.Update();
}
</script><!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>演示asp.net ajax最基本功能</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem></asp:ListItem>
<asp:ListItem>北京</asp:ListItem>
<asp:ListItem>上海</asp:ListItem>
<asp:ListItem>香港</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" />
</ContentTemplate>
</asp:UpdatePanel>
<br />
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
请输入日期:
</td>
<td>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<table cellpadding="0" cellspacing="0">
<tr>
<td>
<asp:TextBox ID="TextBox1" runat="server" Width="147px" Text="<%# DateTime.Now.AddDays(20).ToShortDateString() %>" />
<asp:Button ID="Button1" runat="server" Text="..." OnClick="Button1_Click" />
</td>
</tr>
<tr>
<td>
<asp:Calendar ID="Calendar1" runat="server" Visible="False" Style="position: absolute"
OnSelectionChanged="Calendar1_SelectionChanged" BackColor="#FFFFCC" BorderColor="#FFCC66"
BorderWidth="1px" DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt"
ForeColor="#663399" Height="200px" ShowGridLines="True" Width="220px">
<SelectedDayStyle BackColor="#CCCCFF" Font-Bold="True" />
<SelectorStyle BackColor="#FFCC66" />
<TodayDayStyle BackColor="#FFCC66" ForeColor="White" />
<OtherMonthDayStyle ForeColor="#CC9966" />
<NextPrevStyle Font-Size="9pt" ForeColor="#FFFFCC" />
<DayHeaderStyle BackColor="#FFCC66" Font-Bold="True" Height="1px" />
<TitleStyle BackColor="#990000" Font-Bold="True" Font-Size="9pt" ForeColor="#FFFFCC" />
</asp:Calendar>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</table>
<hr />
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
<ContentTemplate>
result:
<asp:Label ID="Label1" runat="server" EnableViewState="False" Font-Size="Small"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
你看其中没有一行javascript代码。如果你认为实现ajax就要至少写一行javascript来写,那么你一定没有选对一个asp.net ajax入门资料。
其实以前也遇到这种问题,说到底是因为js不能保存视图状态,可以想法把下拉列表的值保存起来,以便再次再取;
一般的解决办法是用一个隐含字段来保存下拉列表上次选中的值,一个例子:<html>
<head></head>
<script language=javascript>
window.onload = function(){
document.getElementById("sel").attachEvent("onchange",save());
}
function save()
{
document.getElementById("hidsel").value=document.getElementById("sel").options[document.getElementById("sel").selectIndex].value;//只是每次把选择的值放到hidsel里面,要取的话取这个值就行了;}
</script>
<body>
<input type=hidden id=hidsel name=hidsel runtat=server>(注意加上runtat=server,回发以后不会丢)
<select id=sel name=sel>
<option value=0>0</option>
...
</select>
</body>
</html
{
document.getElementById("hidsel").value=document.getElementById("sel").options[document.getElementById("sel").selectedIndex].value;//只是每次把选择的值放到hidsel里面,要取的话取这个值就行了;}
方法按19楼就行了,就可以在CS类中取到选中的值,后面该做什么方法就做什么方法