تخزين عدد الضوابط المدرجة ديناميكيا للبريد
-
29-09-2019 - |
سؤال
أحتاج إلى إنشاء الوظائف التالية ، والبحث عن أفضل طريقة لتخزين المعلومات على أجهزة postbacks متعددة:
لنفترض أن لدي مربع نص ، وهو مرتبط بسؤال ، أي "الأماكن التي زرتها". بمجرد تحميل مربع النص على التحميل الأول. تحت ذلك ، هناك زر "إضافة مكان آخر". سيؤدي ذلك إلى Postback ، والتي ستضيف بعد ذلك مربع نص آخر أسفل الأول. يمكن القيام بذلك x عدد من المرات.
والسؤال الذي لدي هو ، كيف يمكنني تخزين/تذكر عدد عناصر التحكم التي تمت إضافتها إلى الصفحة من قبل المستخدم ، بالنظر إلى أن هذا الحمل يجب أن يتم في الحدث ، ولم يتم تحميل ViewState في هذه المرحلة؟
تعديل*:
لقد نسيت أن أذكر أنه عندما يحفظ المستخدم ، سيكون هناك بعض التحقق من الصحة ، لذلك إذا فشل التحقق من الصحة ، تحتاج إلى إظهار جميع مربعات النص ، مع بياناته المنشورة.
المحلول 3
بعد بعض التفكير ، والنظر في الإجابات المقدمة ، توصل إلى هذا الحل.
في العناصر النائمة عناصر التحكم ، احصل على حقل إدخال مخفي يقوم بتخزين عدد عناصر التحكم المضافة إلى الصفحة. بعد ذلك ، في البداية ، يمكنني الحصول على الكود التالي (اختبار فقط):
protected override void OnInit(EventArgs e)
{
int i = 0;
i = Int32.Parse(hdnTestCount.Value);
if(Request.Params[hdnTestCount.UniqueID] != null)
{
i = Int32.Parse(Request.Params[hdnTestCount.UnitueID]);
}
for (int j = 1; j <= i; j++)
{
TextBox txtBox = new TextBox();
txtBox.ID = "Test" + j.ToString();
plhTest.Controls.Add(txtBox);
}
}
protected void btnAdd_OnClick(object sender, EventArgs e)
{
int i = 0;
i = Int32.Parse(hdnTestCount.Value) + 1;
TextBox txtBox = new TextBox();
txtBox.ID = "Test" + i.ToString();
plhTest.Controls.Add(txtBox);
hdnTestCount.Value = i.ToString();
}
بالطبع المشكلة الوحيدة مع هذا ، هي أن المستخدم يمكن معالجته من قبل المستخدم في الحقل المخفي. الخيار الآخر الوحيد هو استخدام الجلسة ، التي لا أريد استخدامها أثناء الالتزام بها ، حيث تم تحديث الصفحة بهذه الطريقة ، فسيتم إعادة تعيين النموذج نفسه ، وهو ما يجب أن يحدث.
نصائح أخرى
إذا كنت ستسمح فقط لعدد محدود من مربعات النصوص في النموذج الخاص بك ، فيمكنك إنشاء هذا العدد من مربعات النصوص خلال page_init وتعيين وضوحها على خطأ حتى لا يتم تقديمها في المتصفح. في حدث النقر فوق الزر ، يمكنك العثور على مربع نص غير مرئي أول وتغيير الرؤية إلى True. شيء من هذا القبيل
protected void Page_Init(object sender, EventArgs e)
{
for (int i = 0; i < 20; i++)
{
this.Form.Controls.Add(new TextBox() { Visible = false });
}
}
protected void addTextboxButton_Click(object sender, EventArgs e)
{
TextBox tb = this.Form.Controls.OfType<TextBox>().FirstOrDefault(box => box.Visible == false);
if (tb != null) tb.Visible = true;
}
باستخدام هذا النهج ، تصبح مربعات النص مرئية واحدة تلو الأخرى في كل زر ، وتصحيح قيم Postback.
من الواضح أنك ترغب في وضع المزيد من الأعمال فيه ، مثل تحديد بعض عناصر التحكم الحرفية لإنشاء فترات فواصل بين الأسطر ومطالباتها لملبس النص ، بالإضافة إلى عرض رسالة عندما يضغط المستخدم على أي حد محدود تقوم بتعيينه.
الخيار 1: يمكنك استخدام الجلسة لتخزين عدد مربعات النص ...
الخيار 2: يمكنك حتى إضافة عناصر تحكم في حدث تحميل الصفحة ، حيث سيكون لديك معلومات ViewState.
فيما يلي الروابط التي يمكن أن تساعدك ...