2010-11-17 65 views
3

我对Telerik MVC扩展是合理的新手。我在视图中成功实现了我的第一个实例。我没有使用Telerik MVC Grid实现我的第二个视图,但是绑定到网格的类有2列,它们的类型为Nullable。当我运行我的代码时,视图吐出一个错误,如下所示:Telerik MVC Grid - 可以为空的DateTime属性的问题

传入字典的模型项目为null,但此字典需要类型为“System.DateTime”的非空模型项目。

我原本以为这可能是一个模板,只适用于DateTime而不是Nullable,但我完全拿出任何显示这些DataTime的列的渲染问题?属性。

我的代码如下:

查看代码Telerik的MVC电网

<%= 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; } 
} 

有谁有一个想法,我怎么能解决这个问题?

回答

6

我在Telerik论坛上设法找到了这个问题的解决方案。如果有其他人遇到此问题,请查看以下主题:

http://www.telerik.com/community/forums/aspnet-mvc/grid/problem-with-nullable-datetime-property.aspx#1423387 简而言之,解决方案是您的ASP.NET MVC项目的Views/Shared文件夹中应该有一个EditorTemplates文件夹。这个EditorTemplates文件夹由Telerik添加。在这个文件夹中有一个叫做DateTime.ascx的模板视图,它继承自System.Web.Mvc.ViewUserControl。问题在于模板期望正常的DateTime。要修复它,请将其更改为期望可为空的DateTime,如下所示:

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

解决此问题。

+0

我不使用Telerik的从什么,但这个答案还是让我的错误消息我得到了正确的道路上。谢谢! – 2011-02-24 22:58:17

+0

嗨Shea我有同样的问题,但我并没有使用Telerik。你是如何解决你的问题的? – Jacques 2012-08-21 09:24:45

+0

@Jacques: 如果你没有自己解决这个问题,我遇到了类似的问题,并且通过在类中同时包含DateTimePicker对象和DateTime对象并在TryUpdateModel调用后将前者移植到后者来解决此问题。 – 2015-02-05 14:02:46

1

您还必须删除您以前可能拥有的任何(不可为空)模板才能使用DateTime?模板被击中。

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

+0

啊,杰出的建议,谢谢。 – Ozzy 2010-12-17 08:41:07