سؤال

أستخدم Entities Framework لتنفيذ طبقة الوصول إلى البيانات الخاصة بي في ASP.NET MVC.عندي مشكلة في العرض

عندما يكون الكود الخاص بي في طريقة العرض شيئًا مثل:

لقد حصلت على خطأ في وقت التشغيل:

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

وصف:حدث استثناء غير معالج أثناء تنفيذ طلب الويب الحالي.الرجاء مراجعة تتبع المكدس للحصول على مزيد من المعلومات حول الخطأ ومكان نشأته في التعليمات البرمجية.

تفاصيل الاستثناء:System.NullReferenceException:مرجع كائن لم يتم تعيين إلى مثيل كائن.

خطأ المصدر:

السطر 14:

السطر 15:<٪ = model.firstName ٪> السطر 16:

السطر 17:

يتم إنشاء هذا من قالب العرض القوي.لقد تأكد من أنني أضفت إحالة النموذج إلى web.config لم أواجه هذا الخطأ عندما كنت أستخدم LINQ إلى SQL

أي مساعدة؟

هل كانت مفيدة؟

المحلول 2

وأنا أحسب من ذلك! كانت المشكلة في VIEW عادة، فإنه سيكون،  باستخدام (Html.BeginForm (جديد {معرف = Model.Id}))

إذا كان المفتاح الأساسي في قاعدة البيانات الخاصة بك معرف_الفئة، هل تعتقد أنك يجب أن تتكيف مع رمز إلى

ومعرف = Model.CategoryID

ولكن، في الواقع، يجب ان تفعل مثل هذا،

وباستخدام (Html.BeginForm (جديد {معرف_الفئة = Model.CategoryID}))

وإلا، فإنه لن ملء هذا النموذج.

والاستفحال، ونأمل أن يساعد!

نصائح أخرى

وبما أنني لا أستطيع التعليق على إجابة سأفعل ذلك من خلال الإجابة جديدة .. لقد لاحظت أن السمة الخاصة بك يسمى "الاسم الأول"، هل أنت قبل أي فرصة يحاول أن يفعل <لأ href = "http://www.asp.net/learn/mvc/tutorial-26-cs.aspx" يختلط = "نوفولو noreferrer "> هذا البرنامج التعليمي؟ وهذا العمل تحرير كنت تواجه مشاكل مع؟

ولأن هذا هو نفس المشكلة بالضبط لي و 2 من زملائي تواجهها. وفيما يلي شرح أكثر تفصيلا لهذه المشكلة:

وهذا هو عمل تحكم:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Contact contactToEdit) {
    if (!ModelState.IsValid)
        return View();

    try {
        var originalContact = (from c in base._entities.ContactSet
                               where c.Id == contactToEdit.Id
                               select c).First();
        base._entities.ApplyPropertyChanges(originalContact.EntityKey.EntitySetName, contactToEdit);
        base._entities.SaveChanges();

        return RedirectToAction("Index");
    } catch(Exception e) {
        return View();
    }
}

وعندما يتم استدعاء ApplyPropertyChanges على استثناء . (InvalidOperationException) رسالة الاستثناء:

<اقتباس فقرة>   

{System.InvalidOperationException: إن ObjectStateManager لا يحتوي على ObjectStateEntry مع الإشارة إلى كائن من نوع 'ContactManager.Models.Contact "
.   في System.Data.Objects.ObjectContext.ApplyPropertyChanges (سلسلة entitySetName، تغيرت وجوه)
  في ContactManager.Controllers.HomeController.Edit (الاتصال contactToEdit) في C: \ المستخدمين \ يروين \ سطح المكتب \ ContactManager \ ContactManager \ ContactManager \ تحكم \ HomeController.cs: خط 65}

عند أضيف هذا الخط قبل ApplyPropertyChanges:

System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact);

س لا يحتوي على إدخال من النوع الصحيح. ( صورة التصحيح )

ملحوظة: لقد تقدمت انحراف صغير من البرنامج التعليمي، ووضع كائن الكيانات في الفائقة ولذا فإنني لم يكن لديك ليعلن نفس الكائن في كافة وحدات تحكم بلدي. ولكن نفس المشكلة تنشأ عند اتباع البرنامج التعليمي.

ويبدو كما لو لم يتم تعبئة نموذج الخاص بك بشكل صحيح في وحدة تحكم. ليس هناك معلومات كافية حقا في سؤالك للعمل على بالضبط ما يجري خاطئ بالرغم من ذلك.

أحيانا نموذج فارغة لأن عبارة التحديد مع الطريقة .FirstOrDefault() لم يحضر كائن صالح.

يمكنك دائما التغيير .FirstOrDefault() ل .First() وإعادة ترجمة الحل الخاص بك.

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