Telerik Controls с ASP.NET MVC: это нарушает модель MVC? - PullRequest
5 голосов
/ 04 февраля 2009
  1. Будет использовать MVC с включенным управлением Telerik с ASP.NET MVC нарушают модель MVC?

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

Ответы [ 5 ]

12 голосов
/ 04 февраля 2009

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

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

3 голосов
/ 05 февраля 2009

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

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

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

-Todd

0 голосов
/ 12 марта 2015

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

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

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

ВИД:

@model MyViewModel

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

VIEWMODEL: (или модель)

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

CONTROLLER:

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(). Обновление аналогично последним 3 строкам в этой функции, поскольку вы создаете экземпляр модели, копируете значения из модели, переданной из сетки, а затем делаете что-то вроде dataContext.SaveChanges() для сохранения. После сохранения сетка автоматически выполняет повторное чтение, поэтому она увидит последние значения. Больше ничего не нужно запускать при обратной передаче для повторного связывания данных, поэтому больше нет кода для записи.

Просто посмотрите на примеры кода здесь, чтобы дать лучшую идею: http://demos.telerik.com/aspnet-mvc/

0 голосов
/ 04 февраля 2009

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

0 голосов
/ 04 февраля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...