سؤال

بسبب الارتباك بين جميع المعلومات الموجودة هناك عن MVC من جميع إصدارات المعاينة والإصدار الرسمي الوحيد الذي كنت مرتبك للغاية بكيفية التعامل مع ViewUsercontrols. لذلك مرة واحدة وإلى الأبد، أخبرني كيفية تنفيذ هذا المثال:

لدي قائمة بالأحداث القادمة التي يجب عرضها على عدة صفحات من موقع الويب الخاص بي. لذلك، قمت بوضع Viewusercontrol جديدا (ListeVents.ascx) داخل وجهات النظر الخاصة بي المشترك.

أنا أطلب هذه listevents.ascx لتقديم عرض منزلي / فهرس مثل هذا:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents");%>
</p>

كيف أذهب في اجتياز نموذجي إلى هذا Viewusercontrol؟ أعلم أنني أستطيع القيام بهذا:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents", (new Model.Services.EventService(null)).ListEvents());%>
</p>

ولكن هذا لا يبدو وكأنه شيء ذكي للغاية للقيام به، مما يخلق نموذجا جديدا من داخل المنظر؟! أم أنا مخطئ هنا؟ لا أستطيع حتى اجتياز أي التحقق من الصحة، وبالتالي المعلمة فارغة. لذلك خيار بديل هو تخزين هذه البيانات في عضو ViewData []، ولكن من المفترض أن تعتمد ViewUserControl على ViewData من الوالد!

أنا متأكد من أن هناك إجابة بسيطة للغاية على هذا، يرجى المشاركة كما انتهيت من تصفح الويب لهذه المشكلة.

شكرا!

إجابة بسيطة: يجب أن يحصل Viewusercontrol دائما على نموذجه من العرض الذي يقيم فيه. العمل حول هذا، مثل بإضافة ملف CodeBehind إلى Viewusercontrol، من شأنه كسر نمط MVC.

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

المحلول

بشكل افتراضي، سيتم استخدام نفس النموذج كما يتم استخدام الصفحة. إذا كنت ترغب في توفير نموذج لكل مثيل RenderPartial, ، ربما يكون وضعك مثل تقديم العديد من الإدخالات في تطبيق بلوق. يمكنك جلب كل نموذج من مجموعة في طراز صفحتك وتمريره إلى عنصر تحكم المستخدم مثل هذا:

foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top