Я понимаю, что это старый вопрос, но Элементы управления 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/