मैं एक समग्र एएसपी.NET नियंत्रण बनाने की कोशिश कर रहा हूं जो कि आप एक संपादन योग्य नियंत्रण संग्रह बनाते हैं।एएसपी.नेट गतिशील नियंत्रण गिनती (जैसे ही आप जाते हैं नियंत्रण बनाते हैं)
मेरी समस्या यह है कि जब मैं ऐड या पोस्टबैक बटन दबाता हूं (जो फ़ॉर्म को पोस्टबैक करने के अलावा कुछ भी नहीं करता है) टेक्स्ट बॉक्स में दर्ज किए गए किसी भी मान खो जाते हैं।
जब मैं पोस्टबैक के बीच नियंत्रण की संख्या बदलता हूं तो मैं इसे काम नहीं कर सकता। मुझे मूल रूप से नियंत्रण राज्य संपत्ति ControlCount
के आधार पर नियंत्रण जीवन चक्र में दो अलग-अलग समय पर नियंत्रण पेड़ को फिर से बनाने में सक्षम होना चाहिए।
public class AddManyControl : CompositeControl
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
EnsureChildControls();
}
protected override void CreateChildControls()
{
var count = ViewState["ControlCount"] as int? ?? 0;
for (int i = 0; i < count; i++)
{
var div = new HtmlGenericControl("div");
var textBox = new TextBox();
textBox.ID = "tb" + i;
div.Controls.Add(textBox);
Controls.Add(div);
}
ViewState["ControlCount"] = count;
var btnAdd = new Button();
btnAdd.ID = "Add";
btnAdd.Text = "Add text box";
btnAdd.Click += new EventHandler(btnAdd_Click);
Controls.Add(btnAdd);
var btnPostBack = new Button();
btnPostBack.ID = "PostBack";
btnPostBack.Text = "Do PostBack";
Controls.Add(btnPostBack);
}
void btnAdd_Click(object sender, EventArgs e)
{
ViewState["ControlCount"] = (int)ViewState["ControlCount"] + 1;
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
// If I remove this RecreateChildControls call
// the collection lags behind each postback
// because the count is incremented in the btnAdd_Click event handler
// however, the values are not lost between postbacks
RecreateChildControls();
}
}
+1, यह ठीक काम करता है, मैं इस –
के बारे में उत्सुक था क्योंकि सभी 'टेक्स्टबॉक्स' प्रत्येक बार पोस्टबैक अर्जित होने पर खरोंच से फिर से जोड़े गए थे, वे अपने टेक्स्ट मानों को कैसे पुनर्स्थापित करते हैं? एएसपीनेट ने खुराक की खुराक की? –
@Rami - हाँ, यह व्यूस्टेट जादू है, जब यह ठीक काम करता है :-) –