Управление Telerik с помощью ASP.NET MVC:Нарушает ли это модель MVC?

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

  •  21-08-2019
  •  | 
  •  

Вопрос

  1. Будет использовать Элементы управления Telerik с поддержкой MVC С ASP.NET MVC нарушает модель MVC?

  2. А если нет, то какая производительность достигает (по сравнению с функциями и скоростью разработки) с использованием элементов управления Telerik по кодирующему вручную HTML?

Это было полезно?

Решение

Поскольку я создал это демо, я думаю, что тоже могу поделиться своим мнением.По моему мнению, этот пример приложения не нарушает принципы MVC.RadControls не использует ViewState или обратные передачи в приложениях MVC (вы можете проверить сгенерированный вывод, чтобы убедиться в этом — никаких __doPostBack или __VIEWSTATE).Действительно, вам нужно написать некоторый код для привязки сетки или заполнения меню, но код по-прежнему находится в представлении (ASPX) и полностью связан с презентацией (опять же, это только мое мнение, поэтому я могу ошибаться).

Я также должен упомянуть, что действительно существуют некоторые ограничения: некоторые встроенные функции (которые полагаются на обратную передачу) не работают в MVC.Однако будем работать над их решением.Не стесняйтесь обращаться в службу поддержки или ветку форума, если у вас возникнут какие-либо конкретные вопросы относительно RadControls и ASP.NET MVC.

Другие советы

На ваш второй вопрос относительно снижения производительности по сравнению с.ручное кодирование, я думаю, это зависит от используемого вами элемента управления.Например, если вы используете какие-либо элементы управления навигацией Telerik в MVC, такие как Menu, TabStrip или PanelBar, вы сэкономите ТОННУ ручного кодирования (поскольку меню/вкладка/и т. д.требуется много клиентского кода для предоставления интерактивных функций (например, раскрывающихся опций) и большого количества сложного CSS).Итак, RadControls в MVC поможет восстановить -производительность— вы привыкли при создании многофункциональных приложений ASPNET.

Для более сложных элементов управления, таких как Grid, которые во многом зависят от обратной передачи, вы в основном получаете выгоду от предоставленного стиля.Чтобы соответствовать модели MVC, такие элементы управления, как Grid, требуют довольно большого количества «собственного» кода для «преобразования» событий обратной передачи в действия URL-адреса, поэтому вам не придется экономить много кода по сравнению с обычными элементами управления.шаблон сетки MVC.Однако вы сэкономите много времени на стилизации, а разница в производительности будет незначительной.

Надеюсь, это поможет.

-Тодд

Я почти уверен, что они основаны на модели PostBack в WebForms и не будут совместимы с представлениями MVC.Вероятно, вы могли бы найти способ заставить их работать, но это не соответствовало бы принципам MVC.При необходимости вы можете смешивать/сопоставлять веб-формы с представлениями MVC на одном веб-сайте, но я бы не рекомендовал это.

При использовании элементов управления Telerik вы потеряете большую часть преимуществ MVC:четкое разделение задач, улучшенная тестируемость, более компактный HTML, более чистая архитектура.Я не удивлюсь, если в конечном итоге Telerik выпустит элементы управления для MVC.На данный момент я бы рассмотрел либо чистые реализации Javascript для клиентских элементов управления, либо созданные вручную ViewUserControls, если вам нужно повторно использовать некоторые общие компоненты.

Лично я бы не стал использовать текущие элементы управления Telerik с MVC.Я думаю, что они работают в некоторых ситуациях (http://telerikwatch.com/2009/01/telerik-mvc-demo-app-now-available.html), но я думаю, что они в значительной степени ориентированы на состояние просмотра/обратную передачу.Зная Telerik, они выпустят версию, совместимую с MVC, но, похоже, им предстоит много работы...

Я понимаю, что это старый вопрос, но Элементы управления ASP.NET MVC от Telerik — это просто элементы управления, такие как средства выбора даты, сетки, панели панелей, полосы вкладок.Они не конкурируют с MVC. рамки.Они работают в сочетании с это.Ваш вопрос говорит мне, что нет, или, по крайней мере, делал нет, поймите, что такое MVC на самом деле.

Для удобства тех, кто может быть сбит с толку, MVC означает Модель-Представление-Контроллер.Есть Модель, представляющий объекты, которые вы используете для хранения или извлечения значений, Вид, который отображает значения этих объектов и может использоваться для их установки с помощью элементы управления, такие как средства выбора даты, сетки и т. д. Telerik, а также Контроллер, в котором находятся функции, которые визуализируют представления и взаимодействуют с элементами модели.Элементы управления, которые вы используете для обновления модели, должны иметь возможность взаимодействовать с этой моделью, чтобы быть MVC-совместимыми.Если бы они этого не сделали, их нельзя было бы рекламировать как элементы управления MVC, так что да, их элементы управления работают и не «нарушают» структуру MVC.

Вот одно из таких применений элемента управления DatePicker в сочетании с моделью:

ВИД:

@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(), для фильтрации.Вместо того, чтобы создавать, скажем, отдельные столбцы данных и добавлять их в 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