عناصر تحكم Telerik باستخدام ASP.NET MVC:هل هذا ينتهك نموذج MVC؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

  1. سوف تستخدم تمكين MVC عناصر التحكم Telerik مع ASP.NET MVC ينتهك نموذج MVC؟

  2. وإذا لم يكن الأمر كذلك ، فما نوع الأداء (مقابل الميزات وسرعة التطوير) سيكون هناك مع استخدام عناصر تحكم Telerik على ترميز HTML يدويًا؟

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

المحلول

وبما أنني الشخص الذي قام ببناء هذا العرض التوضيحي، أعتقد أنه يمكنني مشاركة رأيي أيضًا.هذا التطبيق النموذجي لا ينتهك مبادئ MVC وفقًا لي.لا تعتمد RadControls على ViewState أو عمليات إعادة النشر في تطبيقات MVC (يمكنك التحقق من المخرجات التي تم إنشاؤها لترى بنفسك - لا يوجد __doPostBack أو __VIEWSTATE).في الواقع، تحتاج إلى كتابة بعض التعليمات البرمجية لربط الشبكة أو ملء القائمة - ولكن لا يزال الرمز موجودًا في العرض (ASPX) ويرتبط بالكامل بالعرض التقديمي (مرة أخرى، هذا مجرد رأيي لذا قد أكون مخطئًا).

يجب أن أذكر أيضًا أن هناك بعض القيود بالفعل - بعض الميزات المضمنة (التي تعتمد على إعادة النشر) لا تعمل في MVC.ومع ذلك سوف نعمل على حلها.لا تتردد في فتح تذكرة دعم أو موضوع منتدى إذا كانت لديك أية أسئلة معينة فيما يتعلق بـ RadControls وASP.NET MVC.

نصائح أخرى

بالنسبة لسؤالك الثاني، فيما يتعلق بنتائج الأداء مقابل.الترميز اليدوي، أعتقد أن ذلك يعتمد على التحكم الذي تستخدمه.على سبيل المثال، إذا كنت تستخدم أيًا من عناصر التحكم في التنقل Telerik في MVC - مثل القائمة أو TabStrip أو PanelBar - فسوف توفر لنفسك الكثير من الترميز اليدوي (نظرًا لأن القائمة/شريط علامات التبويب/إلخ.يتطلب الكثير من التعليمات البرمجية من جانب العميل لتوفير الميزات التفاعلية (مثل خيارات القائمة المنسدلة) والكثير من CSS المعقدة).لذا، فإن RadControls في MVC سوف تساعد في استعادة -إنتاجية- اعتدت على ذلك عند إنشاء تطبيقات ASPNET الغنية.

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

امل ان يساعد.

-تود

أنا متأكد تمامًا من أن هذه تعتمد على نموذج PostBack في WebForms ولن تكون متوافقة مع طرق عرض MVC.من المحتمل أن تجد طريقة لهم للعمل، لكنها لن تكون متوافقة مع مبادئ MVC.يمكنك مزج/مطابقة WebForms مع طرق عرض MVC في نفس موقع الويب إذا لزم الأمر، لكنني لا أوصي بذلك.

ما ستخسره باستخدام عناصر تحكم Telerik هو معظم فوائد MVC:الفصل الواضح بين الاهتمامات، وقابلية الاختبار المحسنة، وHTML الأصغر حجمًا، والهندسة المعمارية الأنظف.لن يفاجئني أن أجد أن Telerik يأتي في النهاية بعناصر تحكم لـ MVC.في الوقت الحالي، سألقي نظرة على تطبيقات Javascript النقية من جانب العميل أو ViewUserControls المرمزة يدويًا إذا كنت بحاجة إلى إعادة استخدام بعض المكونات الشائعة.

أنا شخصياً لن أستخدم عناصر التحكم telerik الحالية مع MVC.أعتقد أنهم يعملون في بعض المواقف (http://telerikwatch.com/2009/01/telerik-mvc-demo-app-now-available.html)، لكنني أعتقد أنهم يركزون تمامًا على حالة العرض/إعادة النشر.مع معرفتهم بالتليفزيون، سيخرجون بإصدار متوافق مع MVC، لكن يبدو أن أمامهم الكثير من العمل...

أدرك أن هذا سؤال قديم، ولكن عناصر تحكم ASP.NET MVC الخاصة بـ Telerik هي ببساطة عناصر تحكم، مثل منتقيات التاريخ، والشبكات، وأشرطة اللوحات، وشرائط علامات التبويب.هذه ليست منافسة لـ MVC نطاق.هم يعملون بالاقتران مع هو - هي.سؤالك يقول لي أنك لا تفعل ذلك، أو على الأقل فعل لا، افهم ما هو MVC حقًا.

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

فيما يلي أحد هذه الاستخدامات لعنصر تحكم منتقي التاريخ، جنبًا إلى جنب مع النموذج:

منظر:

@model MyViewModel

<%= Html.Kendo().DateTimePickerFor(model => model.ExpirationDate)
    .Name("datetimepicker")
    .Value(model.ExpirationDate)        
%>

نموذج العرض: (أو النموذج)

public MyViewModel() {
    public DateTime ExpirationDate { get; set; }
}

مراقب:

public ActionResult Index(int id)
{
    var data = dataContext.SomeTable.Where(e => e.ID == id).FirstOrDefault();
    // return View(data); // this would allow you to use @model SomeTable 
    // in your view, and not require a ViewModel, but returns the whole 
    // record for the given ID

    // ViewModels allow you flexibility in what you return
    MyViewModel mvm = new MyViewModel();
    mvm.ExpirationDate = data.ExpirationDate;
    return View(mvm);
}

لترميزها باستخدام عروض Telerik التجريبية، يتطلب الأمر الكثير من النسخ/اللصق والعديد من التعديلات الصغيرة لنموذجك المحدد والبيانات التي تدخلها (كما هو موضح أعلاه).هناك أيضًا تعليمات برمجية أقل بكثير نظرًا لأن عناصر التحكم تحتوي على كل شيء مدمج تقريبًا، لذلك يتم تقليل وقت الإنتاج بالطبع، أشياء مثل التصفية والترحيل والفرز شبكات موجود بالفعل - يمكنك تشغيله بمجرد إضافة القول، Filterable(), ، للتصفية.بدلاً من الاضطرار إلى إنشاء DataColumns فردية، على سبيل المثال، وإضافتها إلى DataTable، ثم ربط ذلك بشبكة، ثم القلق بشأن الأفراد OnDataBound الأحداث (التي لا يزال بإمكانك القيام بها، ولكن تحتاج إلى قدر أقل منها)، يمكنك إنشاء مثيل للشبكة، وإضافة الأعمدة، وتعيين وظائف وحدة التحكم الخاصة بك لإنشاء العناصر وقراءتها وتحديثها وحذفها، وتعيين أي خصائص على الشبكة، وبذلك تكون قد انتهيت :

<%: Html.Kendo().Grid<Models.ViewModels.MyViewModel>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(c => c.ExpirationDate).Format("MM/DD/YYYY");
    })
    .HtmlAttributes(new { style = "height: 380px;" })
    .Scrollable()
    .Sortable()
    .Filterable()
    .Pageable(pageable => pageable
        .Refresh(true)
        .PageSizes(true)
        .ButtonCount(5))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("Customers_Read", "Grid"))
        .Create(create => create.Action("Customers_Create", "Grid"))
        .Update(update=> update.Action("Customers_Update", "Grid"))
        .Delete(delete => create.Action("Customers_Delete", "Grid"))
    )
 %>

"القراءة" بسيطة مثل أخذ أول سطرين في ملف public ActionResult Index() أعلاه ووضعها في public Customers_Read([DataSourceRequest] DataSourceRequest request) {} الوظيفة التي ترجع data مثل .ToDataSourceResult().يشبه التحديث الأسطر الثلاثة الأخيرة في هذه الوظيفة، نظرًا لأنك تقوم بإنشاء مثيل للنموذج، ونسخ القيم من النموذج الذي تم تمريره من الشبكة، ثم قم بشيء مثل dataContext.SaveChanges() للحفظ.بمجرد الحفظ، تقوم الشبكة تلقائيًا بقراءة أخرى، لذلك سترى أحدث القيم.ليست هناك حاجة إلى تشغيل أي شيء آخر عند إعادة النشر لإعادة ربط البيانات، لذلك لا داعي للكتابة بعد الآن.

ما عليك سوى إلقاء نظرة على أمثلة التعليمات البرمجية هنا لإعطاء فكرة أفضل: http://demos.telerik.com/aspnet-mvc/

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