我已经很久没有使用 Web 表单了,我发现自己已经记不起大部分的好处了。
我有一个用户控件,它有一个按钮、一个转发器,并且转发器的 ItemTemplate 属性是另一个用户控件。
<asp:Button runat="server" ID="btnAdd" CssClass="btn" Text="Add" OnClick="btnAdd_Click"/>
<br/>
<asp:Repeater runat="server" ID="rptrRequests">
<ItemTemplate>
<uc1:ucRequest ID="ucNewRequest" runat="server" />
</ItemTemplate>
</asp:Repeater>
这个想法是,当用户单击“添加”按钮时,会将一个新的 ucRequest 实例添加到集合中。后面的代码如下:
public partial class ucRequests : UserControl
{
public List<ucRequest> requests
{
get
{
return (from RepeaterItem item in rptrRequests.Items
select (ucRequest) (item.Controls[1])
).ToList();
}
set
{
rptrRequests.DataSource = value;
rptrRequests.DataBind();
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
requests = new List<ucRequest>();
}
protected void btnAdd_Click(object sender, EventArgs e)
{
var reqs = requests;
reqs.Add(new ucRequest());
requests = reqs;
}
}
经过多次谷歌搜索后,我现在记得我应该在 OnInit 方法中绑定中继器,以便 ViewState 将控件的捕获数据放在 ucRequest 控件中的回发之间,但是当我尝试这样做时,我将始终拥有因为它的 Items 集合总是空的,所以Repeater 上的控件的单个实例。
我怎么能做到这一点?
提前致谢。