asp.net-mvc - ماهو - الفرق بين asp.net و php




ASP.NET MVC 3-قالب مقارنة مقابل قالب العرض مقابل المحرر (4)

لذا ، يجب أن يتحدث العنوان عن نفسه.

لإنشاء مكونات قابلة لإعادة الاستخدام في ASP.NET MVC ، لدينا 3 خيارات (يمكن أن تكون أخرى لم أذكرها):

نظرة جزئية:

@Html.Partial(Model.Foo, "SomePartial")

قالب المحرر المخصص:

@Html.EditorFor(model => model.Foo)

قالب العرض المخصص:

@Html.DisplayFor(model => model.Foo)

من حيث العرض / HTML الفعلي ، فإن جميع التطبيقات الثلاثة متطابقة:

@model WebApplications.Models.FooObject

<!-- Bunch of HTML -->

إذن ، سؤالي هو - متى / كيف تقرر أي واحد من الثلاثة يستخدم؟

ما أبحث عنه حقًا هو قائمة بالأسئلة التي يجب طرحها على نفسك قبل إنشاء واحدة ، والتي يمكن استخدام الإجابات عليها لتحديد النموذج الذي سيتم استخدامه.

وإليك الشيءان اللذان وجدتهما أفضل مع EditorFor / DisplayFor:

  1. إنهم يحترمون التسلسلات الهرمية للنماذج عند تقديم مساعدين HTML (على سبيل المثال ، إذا كان لديك كائن "Bar" في نموذج "Foo" الخاص بك ، فسيتم عرض عناصر HTML لـ "Bar" بـ "Foo.Bar.ElementName" ، في حين سيكون الجزء الجزئي " ElementName ").

  2. أكثر قوة ، على سبيل المثال ، إذا كان لديك List<T> بشيء في ViewModel ، فيمكنك استخدام @Html.DisplayFor(model => model.CollectionOfFoo) ، و MVC ذكية بدرجة كافية لترى أنها مجموعة وتؤدي إلى عرض الشاشة الواحدة لكل عنصر (على عكس الجزء الجزئي ، والذي يتطلب صراحة لحلقة).

لقد سمعت أيضا DisplayFor يجعل قالب "للقراءة فقط" ، ولكن أنا لا أفهم ذلك - لا يمكن أن يلقي شكلا هناك؟

يمكن أن يقول لي أحد الأسباب الأخرى؟ هل هناك قائمة / مقالة في مكان ما مقارنة بين الثلاثة؟


استخدم طريقة عرض _partial إذا:

  1. عرض Centric المنطق
  2. ما الذي يجب الاحتفاظ به لجميع _partial HTML ذات الصلة بـ "عرض الإعلان" في طريقة العرض هذه فقط. في طريقة القالب ، سيكون عليك الاحتفاظ ببعض HTML خارج عرض القالب مثل "رأس الصفحة الرئيسية أو أي حدود / إعدادات خارجية.
  3. تريد تقديم عرض جزئي مع المنطق (من وحدة تحكم) باستخدام URL.Action("action","controller") .

أسباب استخدام القالب:

  1. تريد إزالة ForEach(Iterator) . القالب جيد بدرجة كافية لتحديد الطراز كنوع قائمة. وسوف نفعل ذلك تلقائيا.
  2. نموذج Centric المنطق. إذا تم العثور على طرق عرض متعددة في نفس المجلد displayfor Template ، فسيعتمد العرض على Passed Model.

فرق آخر لم يتم ذكره حتى الآن هو أن طريقة العرض الجزئي لا تضيف بادئات نموذجية في حين أن القالب Here هو المشكلة


يمكنك بالتأكيد تخصيص DisplayFor لعرض نموذج قابل للتحرير. ولكن الاتفاقية لـ DisplayFor لتكون readonly و EditorFor لتكون من أجل التحرير. سيضمن الالتزام بالاتفاقية أنه بغض النظر عن ما تمر به إلى DisplayFor ، فسوف يفعل نفس النوع من الأشياء.


EditorFor مقابل DisplayFor بسيط. دلالات الأساليب هي توليد تحرير / إدراج وعرض / قراءة طرق العرض فقط (على التوالي). استخدم DisplayFor عند عرض البيانات (على سبيل المثال ، عند إنشاء divs والإمتدادات التي تحتوي على قيم الطراز). استخدم EditorFor عند تحرير / إدراج البيانات (أي عند إنشاء علامات الإدخال داخل النموذج).

الأساليب المذكورة أعلاه تتمحور حول النموذج. وهذا يعني أنها ستأخذ البيانات الوصفية للنموذج في الحسبان (على سبيل المثال ، يمكنك إضافة تعليقات إلى فئة النموذج الخاص بك باستخدام [UIHintAttribute] أو [DisplayAttribute] وهذا سيؤثر على النموذج الذي سيتم اختياره لإنشاء واجهة المستخدم للنموذج. نماذج البيانات (أي النماذج التي تمثل الصفوف في قاعدة البيانات ، إلخ)

من ناحية أخرى ، يكون Partial مرتكزًا على طريقة العرض حيث أنك تهتم في الغالب باختيار العرض الجزئي الصحيح. لا يحتاج العرض بالضرورة إلى نموذج ليعمل بشكل صحيح. يمكن أن يكون هناك مجموعة مشتركة من العلامات التي يمكن إعادة استخدامها في جميع أنحاء الموقع. بالطبع في كثير من الأحيان تريد أن تؤثر على سلوك هذه الجزئية في هذه الحالة قد ترغب في المرور في نموذج العرض المناسب.

أنت لم تسأل عن @Html.Action التي تستحق أيضا ذكر هنا. يمكنك أن تفكر فيه كإصدار أكثر قوة من Partial في أنه ينفذ إجراء وحدة تحكم تابعة ومن ثم يعرض طريقة عرض (وهو عادةً عرض جزئي). هذا مهم لأن الإجراء التابع يمكن تنفيذ منطق عمل إضافي لا ينتمي إلى طريقة العرض الجزئية. على سبيل المثال ، يمكن أن يمثل مكون سلة التسوق. سبب استخدامها هو تجنب تنفيذ العمل المتعلق بعربة التسوق في كل وحدة تحكم في التطبيق الخاص بك.

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





editortemplates