سؤال

أريد لتكوين نموذج المجلدات مع Nhibernate:

لذلك يجب:

<object id="GigModelBinder" type="App.ModelBinders.GigModelBinder, App.Web"  singleton="false"  >
<property name="VenueManager" ref="VenueManager"/>
<property name="ArtistManager" ref="ArtistManager"/>

لدي سمة الذي يصادف تحكم الإجراءات بحيث تستخدم النموذج الصحيح الموثق أي

[AcceptVerbs("POST")]
    public ActionResult Create([GigBinderAttribute]Gig gig)
    {
        GigManager.Save(gig);
        return View();
    }

هذا يعمل بشكل جيد و GigModelBinder الصحيحة VenueManger و ArtistManager حقن

ومع ذلك إذا كان في بدء التطبيق إضافة:

System.Web.Mvc.ModelBinders.Binders.Add(typeof(App.Shared.DO.Gig), new GigModelBinder());

و في وحدة تحكم العمل استخدام :

UpdateModel<Gig>(gig);

على سبيل المثال:

[AcceptVerbs("POST")]
    public ActionResult Update(Guid id, FormCollection formCollection)
    {
        Gig gig = GigManager.GetByID(id);

        UpdateModel<Gig>(gig);

        GigManager.Save(gig);
        return View();
    }

على VenueManger و ArtistManager لم يتم حقنها في GigModelBinder.

أي أفكار ما أفعله خطأ ؟

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

المحلول

في المثال الأول تذهب عبر Spring.NET لاسترداد وجوه الخاص بك.وهذا يعني أنه سوف ابحث عن جميع التبعيات والتمسك بها في وجوه الخاص بك و كل شيء يعمل بشكل جيد.

في المثال الثاني كنت نسيان Spring.NET على طول ومجرد إنشاء عادي مثيل من فئة.

الخط حيث قمت بالتسجيل من الرابط الخاص بك ينبغي أن تبدو هذه:


System.Web.Mvc.ModelBinders.Binders[typeof(App.Shared.DO.Gig)] = context.GetObject("GigModelBinder");

حيث السياق هو إما IApplicationContext أو IObjectFactory سبيل المثال من Spring.NET الحزمة.

أطيب التحيات ، ماتياس.

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