سؤال

أحتاج إلى إنشاء الوظائف التالية ، والبحث عن أفضل طريقة لتخزين المعلومات على أجهزة 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.

فيما يلي الروابط التي يمكن أن تساعدك ...

فهم الضوابط الديناميكية حقًا

فهم حقا ViewState

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top