استثناء مرجعي فارغ عند الوصول إلى العقار في OnClick

StackOverflow https://stackoverflow.com/questions/2704952

  •  01-10-2019
  •  | 
  •  

سؤال

الرجاء مساعدتي في معرفة الخطأ في هذا الرمز:

لدي صفحة ASP.NET مع زر واحد مرئي.

عندما ينقر عليها المستخدم - مثيلات MyClass (تنفيذه في دليل AppCode) ويتحول غير مرئي (يصبح Button2 مرئيًا).

عندما أقوم بالنقر فوق Button2 ، فإنه يرفع "مرجع الكائن لم يتم تعيينه على مثيل لكائن".

ما الذى يبدو انه مشكله؟

{
    public MyClass noviTest;

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        noviTest = new MyClass(TextBox1.Text);
        Button1.Visible = false;
        Button2.Visible = true;
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        Label1.Text=noviTest.getID; //this is the critical line
    }
}
هل كانت مفيدة؟

المحلول

منذ أن لم يتم إعادة إنشاء الإشارة إلى MyClass على بعد.

يمكنك إضافتها إلى ViewState للحفاظ على إشارة إليها. (على افتراض أن myClass قابل للتسلسل).
في button1_click:

ViewState("noviTest") = noviTest;

ثم في button2_click:

var noviTest = ViewState("noviTest");

نصائح أخرى

noviTest هو لاغال Button2_Click.

جرب شيئًا كهذا:

protected void Page_Load(object sender, EventArgs e)
{
    noviTest = new MyClass(TextBox1.Text);
}
protected void Button1_Click(object sender, EventArgs e)
{
    Button1.Visible = false;
    Button2.Visible = true;    
}
protected void Button2_Click(object sender, EventArgs e)
{
    Label1.Text = noviTest.getID;
}

هذا سوف يسبب noviTest ليتم إنشاء مثيل له في كل طلب صفحة ، بغض النظر عن الزر الذي تم النقر عليه. قد لا يكون هذا هو الحل الأفضل لتطبيقك الخاص (أنا غير معتاد على بقية المنطق في هذه الفئة) لكنك تحصل على الفكرة.

تشبه كل زيارة إلى رمز Behind نوعًا من تشغيل الكود من نقطة الصفر ، ولا يتم إعداد أي شيء لك بين زيارات إلى الصفحة.

لذلك عندما تضغط على الزر الثاني ، لا يتم تهيئة Novitest ، وبالتالي عندما تحاول الاتصال. الحصول على استثناء مرجعي فارغ.

للتعامل مع هذا ، تحتاج إلى التأكد من تهيئة Novitest. إذا كنت ترغب في استمرارها بين زيارات للصفحة ، فأنت بحاجة إلى استخدام بعض الآلية لتخزين أو إعادة إنشاء المثيل. لتخزينها ، ستستخدم (ربما) الجلسة. لإعادة إنشاء ، يمكنك استخدام إما الجلسة أو ViewData لاستمرار قيمة رئيسية من شأنها أن تتيح لك استرداد حالة الكائن من التخزين من نوع ما.

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