بيانات مربع المحتوى القابلة لإعادة الاستخدام في ASP.NET MVC؟

StackOverflow https://stackoverflow.com/questions/1801765

سؤال

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

مثال: Turbotax

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

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

المحلول

بالنسبة للمحتوى الثابت ، قد ترغب في التفكير في استخدام مقتطفات XML+XSLT أو حتى HTML في نظام الملفات وتقديمها ببساطة. قد تكون طريقة htmlhelper أكثر منطقية لهذا العرض الجزئي - html.renderxml () أو html.include (). الفرق الحقيقي الوحيد بين هذه ووجهات النظر الجزئية هو أنه لم يتم الاحتجاج بمحرك العرض لأنه لا توجد أي بدائل. أفعل هذا النوع من الأشياء في سياسة الخصوصية الخاصة بي وشروطها وأحكامها. بالتأكيد سأفكر في الحفاظ على هذه المخبأ.

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

نصائح أخرى

يمكن تمرير البيانات إلى عرض جزئي المستخدم في العديد من الأماكن بعدة طرق:

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

public class PartialViewModelAttribute : ActionFilterAttribute
{
  public override void OnActionExecuted(ActionExecutedContext filterContext)
  {
     BaseViewModel model;

     if (filterContext.Controller.ViewData.Model == null)
     {
          model = new BaseViewModel();
          filterContext.Controller.ViewData.Model = model;
     }
     else
     {
        model = filterContext.Controller.ViewData.Model as BaseViewModel;
     }

     model.PartialModel = new PartialModel(...)   // Partial model initialization
     base.OnActionExecuted(filterContext);
  }
}

ثم يمكنك استخدامه مثل:

[PartialViewModel]
public ActionResult Index()
{
  //...
}

خيار آخر: يمكنك إنشاء فئة BaseController لجميع وحدات التحكم الخاصة بك وإنشاء نموذج جزئي على تهيئة وحدة التحكم الأساسية. ثم يمكن تخزين نموذج الجزور في القاموس []]. لأن استخدام قاموس ViewData في طرق العرض أمر سيء ، قم بإنشاء طريقة تمديد على htmlhelper مثل:

public static PartialModel GetPartialModel(this HtmlHelper helper)
{
   return helper.viewContext.ViewData["PartialModel"] as PartialModel
}

لذلك يمكنك الحصول على النموذج بهذه الطريقة:

<% Html.RenderPartial("MyPartial", Html.GetPartialModel()); %>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top