Telerik MVC Grid - 可以为空的 DateTime 属性的问题
Posted
技术标签:
【中文标题】Telerik MVC Grid - 可以为空的 DateTime 属性的问题【英文标题】:Telerik MVC Grid - problem with nullable DateTime property 【发布时间】:2010-11-17 18:13:46 【问题描述】:我对 Telerik MVC 扩展相当陌生。我已经成功地在视图中实现了我的第一个实例。我没有使用 Telerik MVC Grid 实现我的第二个视图,但是绑定到网格的类有 2 个类型为 Nullable 的列。当我运行我的代码时,视图吐出如下错误:
传入字典的模型项为空,但此字典需要“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;
有人知道我该如何解决这个问题吗?
【问题讨论】:
【参考方案1】:我设法在 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,如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>
这样就解决了问题。
【讨论】:
我没有使用 Telerik 的任何东西,但这个答案仍然让我走上了正确的道路,因为我收到了错误消息。谢谢! 嗨 Shea 我也遇到了同样的问题,但我也没有使用 Telerik。你是怎么解决你的问题的? @Jacques:如果您还没有自己解决这个问题,我遇到了类似的问题并通过在类中同时拥有 DateTimePicker 对象和 DateTime 对象来解决它,并将前者移植到后者在 TryUpdateModel 调用之后。【参考方案2】:您还必须删除之前可能拥有的任何(不可为空的)模板才能使用 DateTime?要命中的模板。
System.Web.Mvc.ViewUserControl<System.DateTime>
【讨论】:
以上是关于Telerik MVC Grid - 可以为空的 DateTime 属性的问题的主要内容,如果未能解决你的问题,请参考以下文章
Telerik MVC Grid:如何在列中使用 DropDownList?
Telerik/ Kendo MVC Grid,按需加载网格,而不是页面加载
如何在 Telerik Grid 中为 ASP.NET MVC 绑定图像
asp.net MVC 4 Telerik Grid Ajax 问题