أوتوفاك لا ملزمة البيانات في فيوموديل
-
02-01-2020 - |
سؤال
لدي واجهة التي لديها خاصية التي هي قائمة من واجهة أخرى وفئة التي نفذت تلك الواجهة ، وأنا سجلت ل أوتوفاك ، ولكن مشكلتي هي أوتوفاك لا ربط البيانات إلى صفي ، كتبت رمز بلدي أدناه :
واجهات بلدي :
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.نصائح أخرى
أنت تفعل بعض الأشياء الخاطئة هنا.
- أوتوفاك لا علاقة له نموذج ملزمة.أوتوفاك هو لحقن التبعيات في منشئ وحدة التحكم الخاصة بك;ال ASP.NET مفك نموذج بيندر يربط طلبات هتب إلى معلمات العمل.هم مخاوف منفصلة تماما. تخلص من الخاص بك
IMaster
حقن التبعية. - مفك لا يمكن ربط وظيفة نموذج إلى واجهة لأنه لا يعرف ما هو نوع ملموس لإنشاء مثيل.ننسى
IMaster
واجهة واستخدام نوع نموذج عرض ملموس. - المشاركات شكل ربط الإجراء المعلمات ، وليس منشئ المعلمات.يجب أن يكون لديك طريقة عمل تقبل أ
Master
كائن.
بافتراض أن هذا هو إجراء الفهرس الخاص بك ، يجب أن يكون لديك طريقة عمل تبدو مثل هذا داخل HomeController
:
[HttpPost]
public ActionResult Index(Master model)
{
...
}
قد تحتاج إلى إجراء تغييرات أخرى للحصول على أين أنت ذاهب ولكن هذا يجب أن تحدد لك على الطريق الصحيح (الآن التعليمات البرمجية الخاصة بك تبدو مشوشة جدا).