Telerik MVC Grid - проблема с обнуляемым свойством DateTime - PullRequest
3 голосов
/ 17 ноября 2010

Я довольно новичок в расширениях Telerik MVC.Я успешно реализовал свой первый экземпляр в представлении.Я не реализую свое второе представление с использованием Telerik MVC Grid, однако класс, который привязан к сетке, имеет 2 столбца типа Nullable.Когда я запускаю свой код, представление выдает ошибку следующим образом:

Элемент модели, переданный в словарь, имеет значение null, но для этого словаря требуется ненулевой элемент модели типа 'System.DateTime'.

Первоначально я думал, что это может быть проблема рендеринга с шаблоном, который работает только с DateTime, но не Nullable, но потом я полностью удалил все столбцы, отображающие этот DataTime?Свойства.

Мой код выглядит следующим образом:

Просмотр кода для Telerik MVC Grid

<%= Html.Telerik().Grid(Model.ScheduledCourseList)
.Name("ScheduledCoursesGrid")
.ToolBar(commands => commands.Insert().ButtonType(GridButtonType.Image).ImageHtmlAttributes(new { style = "margin-left:0" }))
.DataKeys(keys => keys.Add(sc => sc.Id))
.DataBinding(dataBinding =>
    dataBinding.Ajax()
        .Select("_List", "Course")
        .Insert("_InsertAjax", "Course")
        .Update("_UpdateAjax", "Course")
        .Delete("_DeleteAjax", "Course")
)
.Columns(columns =>
{
    columns.Bound(c => c.Id).Width(20);
    //columns.Bound(c => c.ScheduledDateTime).Width(120);
    //columns.Bound(c => c.Location).Width(150);
    columns.Command(commands =>
    {
        commands.Edit().ButtonType(GridButtonType.Image);
        commands.Delete().ButtonType(GridButtonType.Image);
    }).Width(180).Title("Commands");
})
.Editable(editing => editing.Mode(GridEditMode.PopUp))
.Sortable()
.Footer(true) %>

DTO

    public class ScheduledCourseDTO
{
    public int Id { get; set; }
    public int CourseId { get; set; }
    public int CourseProviderId { get; set; }
    public DateTime? ScheduledDateTime { get; set; }
    public DateTime? EndDateTime { get; set; }
    public string Location { get; set; }
    public int SiteId { get; set; }

    public decimal CostBase { get; set; }
    public decimal CostPerAttendee { get; set; }
    public decimal PricePerAttendee { get; set; }
    public int MaxAttendees { get; set; }
    public int CancellationDays { get; set; }

    public bool Deleted { get; set; }
}

У кого-нибудь есть идеи, как мне это решить?

Ответы [ 2 ]

6 голосов
/ 18 ноября 2010

Мне удалось найти решение этой проблемы на форумах Telerik. Если кто-то еще испытывает эту проблему, проверьте следующую ветку:

http://www.telerik.com/community/forums/aspnet-mvc/grid/problem-with-nullable-datetime-property.aspx#1423387 Короче говоря, решение заключается в том, что у вас должна быть папка EditorTemplates в папке Views / Shared вашего проекта ASP.NET MVC. Эта папка EditorTemplates добавлена ​​Telerik. В этой папке есть шаблон представления с именем DateTime.ascx, который наследуется от System.Web.Mvc.ViewUserControl. Проблема в том, что шаблон ожидает нормальный DateTime. Чтобы исправить это, измените его так, чтобы он ожидал обнуляемый DateTime следующим образом:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>

Это решает проблему.

1 голос
/ 16 декабря 2010

Вы также должны удалить любые (не обнуляемые) шаблоны, которые у вас могли быть раньше, для DateTime?удаляемый шаблон.

System.Web.Mvc.ViewUserControl<System.DateTime>

...