关于repeater和ajax的问题?急
<asp:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate>
<asp:DropDownList ID="ddl" runat="server" AppendDataBoundItems="True" DataTextField="type" DataValueField="id"
OnSelectedIndexChanged="changeFirst" AutoPostBack="true">
</asp:DropDownList>
<asp:DropDownList ID="ddl2" runat="server" AppendDataBoundItems="True" DataTextField="type" DataValueField="id"
OnSelectedIndexChanged="changeSecond" AutoPostBack="true" Visible="false">
</asp:DropDownList>
<asp:DropDownList ID="ddl3" runat="server" OnSelectedIndexChanged="changeThird" AutoPostBack="true" DataTextField="type" DataValueField="id" Visible="false">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
上面是一个自定义控件的代码:DropDocType3
配合<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
在单个页面直接放入:
<uc1:DropDocType3 ID="DropDocType32" runat="server" />
实现的联动菜单局部刷新的。
但是在页面中把DropDocType3绑定在repeater里后:
<asp:UpdatePanel ID="UpdatePanel11" runat="server">
<ContentTemplate>
<asp:Repeater ID="Repeater1" runat="server"
onitemdatabound="Repeater1_ItemDataBound" >
<ItemTemplate>
<uc1:DropDocType3 ID="DropDocType31" runat="server" />
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
思路是想repeater里的联动菜单也局部刷新,但实际页面是整体刷新。
望各位指教该如何处理这个问题?已经纠结两三天了。。。 --------------------编程问答-------------------- 是不是在IsPostBack里面重新绑定了数据。 --------------------编程问答-------------------- 使用repeater绑定后,联动菜单是空白,不绑定数据,所以用户控件的Page_Load
加了
if (!IsPostBack || ddl.Items.Count == 0)
{
bindDDL();
}
--------------------编程问答--------------------
<form runat="server">
<asp:Repeater ID="Repeater1" runat="server"
onitemdatabound="Repeater1_ItemDataBound">
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
onselectedindexchanged="DropDownList1_SelectedIndexChanged1">
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True"
onselectedindexchanged="DropDownList2_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="DropDownList3" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
</form>
void BindRepeater()
{
DataTable dtSel = new DataTable();
dtSel.Columns.Add("3name");
dtSel.Columns.Add("3value");
for (int i = 0; i < 10; i++)
{
DataRow dr = dtSel.NewRow();
dr["3name"] = "3name" + i.ToString();
dr["3value"] = "3value" + i.ToString();
dtSel.Rows.Add(dr);
}
Repeater1.DataSource = dtSel;
Repeater1.DataBind();
}
void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DropDownList rep = e.Item.FindControl("DropDownList1") as DropDownList;//找到里层的repeater对象
DataTable dtSel = new DataTable();
dtSel.Columns.Add("name");
dtSel.Columns.Add("value");
for (int i = 0; i < 10; i++)
{
DataRow dr = dtSel.NewRow();
dr["name"] = "name" + i.ToString();
dr["value"] = "value" + i.ToString();
dtSel.Rows.Add(dr);
}
rep.DataSource = dtSel;
rep.DataValueField = "value";
rep.DataTextField = "name";
rep.DataBind();
}
}
void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e)
{
DataTable dtSel = new DataTable();
dtSel.Columns.Add("2name");
dtSel.Columns.Add("2value");
for (int i = 0; i < 10; i++)
{
DataRow dr = dtSel.NewRow();
dr["2name"] = "2name" + i.ToString();
dr["2value"] = "2value" + i.ToString();
dtSel.Rows.Add(dr);
}
//(sender as DropDownList).Parent 可获取 repeatitem
//。。。
}
至于写成你那种控件方式暂时不知道了 --------------------编程问答-------------------- “找到里层的repeater对象”这个是错的,找到里层的dropdownlist控件 --------------------编程问答-------------------- 你所说情况跟你现在情况刚好搞反了,你应该把这个(UpdatePanel)放在repeater外面这样才是局部刷新repeater,你那种方式只是局部刷新你的控件的,但是repeater不是局部刷新的。 --------------------编程问答--------------------
控件内的UpdatePanel取消掉,只单单在repeater外面放UpdatePanel也是无效的。 --------------------编程问答--------------------
加了Triggers指定控件的ID也无效 --------------------编程问答--------------------
重点不是绑定数据控件,重点在随便用一个dropdownlist作为一个下来菜单,绑定到页面的repeater中后,下来有变动后页面会刷新,实际不想刷新,等于要repeater内局部刷新。 --------------------编程问答-------------------- 不懂,哇哈哈,我是来顶贴的
补充:.NET技术 , ASP.NET