سؤال

لدي واجهة التي لديها خاصية التي هي قائمة من واجهة أخرى وفئة التي نفذت تلك الواجهة ، وأنا سجلت ل أوتوفاك ، ولكن مشكلتي هي أوتوفاك لا ربط البيانات إلى صفي ، كتبت رمز بلدي أدناه :

واجهات بلدي :

public interface IDetail
{
    int Id { get; set; }

    string Name { get; set; }
}

public interface IMaster
{
    int Id { get; set; }

    DateTime Description { get; set; }

    List<IDetail> Details { get; set; }
}

دروسي :

public class Detail : IDetail
{
    public int Id { get; set; }

    public string Name { get; set; }
}

public class Master : IMaster
{
    public int Id { get; set; }

    public DateTime Description { get; set; }

    public List<IDetail> Details { get; set; }
}

بلدي تحكم :

public class HomeController : Controller
    {
        IMaster _t;

        [HttpPost]
        public ActionResult Create(IMaster t)
        {
            _t = t;
        }


    }

بلدي أوتوفاك التسجيل :

    public class DependencyConfigure
        {
//Initializing
            public static void Initialize()
            {
                RegisterServices();
            }

//Registering
            private static void RegisterServices()
            {

                ContainerBuilder builder = new ContainerBuilder();

                builder.RegisterAssemblyTypes(
                    typeof(MvcApplication).Assembly
                    ).PropertiesAutowired();            

                builder.RegisterType<ExtensibleActionInvoker>()
                .As<IActionInvoker>()
                .WithParameter("injectActionMethodParameters", true);
                        builder.RegisterControllers(Assembly.GetExecutingAssembly())
                            .InjectActionInvoker();

                builder.RegisterType(typeof(Master)).As(typeof(IMaster));

                var container = builder.Build();
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));            
            }

        }

والرأي هنا :

@model WebApplication1.Models.Master

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

        <div class="form-group">
            @Html.LabelFor(model => model.Description, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Description)
                @Html.ValidationMessageFor(model => model.Description)
            </div>
        </div>

        <div>
            @Html.Label("Details.Name", new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.Editor("Details[0].Name")                
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

وبعبارة أخرى ، عندما أقدم ، لا ترتبط البيانات بالسيد.التفاصيل...

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

المحلول 2

الإجابة الصحيحة هنا، ولهذا السبب تحتاج إلى كتابة موثق مخصص إلى MVC قبل ربط بياناتك إلى ViewModel الخاص بك، قم بإنشاء مثيل من ViewModel ثم ربط البيانات ب ViewModel.يمكنك أن ترى عينة من Binder هنا (التي كتبها Dear Freind Senior Developer Saeed Hamed)

giveacodicetagpre.

نصائح أخرى

أنت تفعل بعض الأشياء الخاطئة هنا.

  1. أوتوفاك لا علاقة له نموذج ملزمة.أوتوفاك هو لحقن التبعيات في منشئ وحدة التحكم الخاصة بك;ال ASP.NET مفك نموذج بيندر يربط طلبات هتب إلى معلمات العمل.هم مخاوف منفصلة تماما. تخلص من الخاص بك IMaster حقن التبعية.
  2. مفك لا يمكن ربط وظيفة نموذج إلى واجهة لأنه لا يعرف ما هو نوع ملموس لإنشاء مثيل.ننسى IMaster واجهة واستخدام نوع نموذج عرض ملموس.
  3. المشاركات شكل ربط الإجراء المعلمات ، وليس منشئ المعلمات.يجب أن يكون لديك طريقة عمل تقبل أ Master كائن.

بافتراض أن هذا هو إجراء الفهرس الخاص بك ، يجب أن يكون لديك طريقة عمل تبدو مثل هذا داخل HomeController:

[HttpPost]
public ActionResult Index(Master model)
{
    ...
}

قد تحتاج إلى إجراء تغييرات أخرى للحصول على أين أنت ذاهب ولكن هذا يجب أن تحدد لك على الطريق الصحيح (الآن التعليمات البرمجية الخاصة بك تبدو مشوشة جدا).

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