自從我使用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;
}
}
經過一番google搜索我現在想起來,我應該結合在OnInit方法中的中繼器,以便ViewState的把控制的捕獲數據的ucRequest控制範圍內對他們在回發之間,但當我嘗試這樣做時,我總是會在Repeater上擁有一個單一的控件實例,因爲它的Items集合總是空的。
我怎麼能做到這一點?
在此先感謝。
哇!有用!我不知道你可以做這種事情。這使它變得如此簡單。謝謝! –