我在使用嵌套在我的ASP.NET 4.5站点的Repeater中的LoginView时遇到了一些麻烦。页面加载时,数据会正确绑定。但是,如果某些外部事件重新绑定转发器,则LoginView模板内的内容不会重新绑定。我尽可能地简化了我的代码以使其可重复。运行此页面,然后单击“重新绑定数据”按钮。按钮标签消失。如何正确重新绑定(例如:显示它所绑定的数据项的文本)?我认为在转发器上调用DataBind()
会重新绑定所有子控件,但我猜不会。我尝试了几次不同的手动绑定迭代(没有工作),但更喜欢干净的实现。
RepeaterTest.aspx
<%@ Import Namespace="MyNamespace" %>
<asp:Repeater runat="server" ID="MyRepeater">
<ItemTemplate>
<asp:LoginView runat="server">
<LoggedInTemplate>
<asp:Button runat="server" Text='<%# ((Container.Parent as RepeaterItem).DataItem as TestClass).Text %>' /><br />
</LoggedInTemplate>
<AnonymousTemplate>
<asp:Button runat="server" Text='<%# ((Container.Parent as RepeaterItem).DataItem as TestClass).Text %>' /><br />
</AnonymousTemplate>
</asp:LoginView>
</ItemTemplate>
</asp:Repeater>
<asp:Button runat="server" Text="Rebind Data" OnClick="Unnamed_Click" />
RepeaterTest.aspx.cs
namespace MyNamespace
{
public partial class RepeaterTest : System.Web.UI.Page
{
List<TestClass> list = new List<TestClass>()
{
new TestClass("hi"),
new TestClass("hello"),
new TestClass("bonjour"),
new TestClass("hola")
};
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
MyRepeater.DataSource = list;
MyRepeater.DataBind();
}
}
protected void Unnamed_Click(object sender, EventArgs e)
{
MyRepeater.DataSource = list;
MyRepeater.DataBind();
}
}
public class TestClass
{
public string Text { get; set; }
public TestClass(string text)
{
Text = text;
}
}
}