سؤال

أحصل على خطأ عندما أقوم بما يلي:

if(Session["value"] != null)
{
   // code
}

الخطأ الذي أحصل عليه هو:

مرجع كائن لم يتم تعيين إلى مثيل كائن.

لماذا هذا؟ أنا دائما التحقق من جلستي بهذه الطريقة؟ أنا أستخدم إطار MVC، هل هذا له علاقة به؟

تعديل:

الرمز هو في منشئ وحدة تحكم:

public class MyController : ControllerBase
{
    private int mVar;

    public MyController()
    {
        if (Session["value"] != null)
        {
            mVar= (int)Session["value"];
        }
    }
}
هل كانت مفيدة؟

المحلول

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

ستحتاج إلى القيام بذلك إما في الإجراء (الطريقة)، أو (ربما أكثر ملاءمة) في مرشح الإجراء، أو OnActionExecuting (إلخ) طريقة (أساليب):

public abstract class ControllerBase : Controller
{
    protected override void OnActionExecuting(
        ActionExecutingContext filterContext)
    {
        // code involving this.Session // edited to simplify
        base.OnActionExecuting(filterContext); // re-added in edit
    }
}

نصائح أخرى

] هو مفهرس، فإنه يعمل مثل طريقة في الفصل.

في هذه الحالة، تكون الجلسة فارغة ولا يمكنك تنفيذ الفهرسة عليه.

افعل هذا:

if(Session != null && Session["value"] != null)
{
   // code
}

عليك أن تفعل ذلك مثل هذا

if(null != HttpContext.Current.Session["Value"])
{
    //Code here.
}

يمكنك الحصول على هذا الخطأ لأن كائن "الجلسة" لاغية. لذلك من المستحيل أن ننظر إلى بت ["القيمة"]. لست على دراية MVC، ولكن إما أن هناك مشكلة أكبر حيث لا يتم إنشاء كائن الجلسة، أو يمكنك الوصول إليها في النقطة الخطأ في دورة الحياة، أو تحتاج فقط إلى اختبار للتحقق مما إذا كانت الجلسة! = باطل.

بناء الجملة المستخدمة من قبلك:

if (Session["mySessionVariable"] != null)
{

}

... هي الطريقة الصحيحة للتحقق من وجود كائن جلسة في ASP.NET. أظن أن المشكلة هي لأنك تستخدم ASP.NET MVC.

ربما يمكن لبعض خبراء MVC أن ينيرنا إلى الطريقة الصحيحة للقيام بذلك في ASP.NET MVC.

يحرر: أرى أن Marc Gravell قد سجلت إجابته أثناء كتابة هذا. يجب أن تكون غير مرئية.

أنا حل بهذه الطريقة:

if (Session.Count > 0 && Session["mySessionVariable"].ToString() != null)
{

}
if(Session != null && Session["name"] != null && Session["name"].ToString()!="")
{
   //fire code
}

يمكنك أيضا استخدام:

if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){
   // Do something
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top