2010-11-17 6 views
3

Je suis relativement nouveau pour les extensions Telerik MVC. J'ai implémenté ma première instance dans une vue avec succès. Je n'implémente pas ma deuxième vue en utilisant la grille Telerik MVC, cependant la classe qui est liée à la grille a 2 colonnes qui sont de type Nullable. Lorsque j'exécute mon code, la vue génère une erreur comme suit:Telerik MVC Grid - problème avec la propriété DateTime nullable

L'élément de modèle transmis au dictionnaire est null, mais ce dictionnaire requiert un élément de modèle non nul de type 'System.DateTime'. Je pensais à l'origine que cela pouvait être un problème de rendu avec un modèle qui ne fonctionne qu'avec DateTime et non Nullable, mais j'ai ensuite supprimé toutes les colonnes affichant ces DataTime? Propriétés.

Mon code est le suivant:

Afficher le code pour Telerik MVC Grille

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

Est-ce que la façon dont quelqu'un a une idée que je peux résoudre ce problème?

Répondre

6

J'ai réussi à trouver la solution à ce problème sur les forums Telerik. Si quelqu'un d'autre rencontre ce problème, consultez le thread suivant:

http://www.telerik.com/community/forums/aspnet-mvc/grid/problem-with-nullable-datetime-property.aspx#1423387 En résumé, la solution est que vous devez disposer d'un dossier EditorTemplates dans votre dossier Views/Shared de votre projet ASP.NET MVC. Ce dossier EditorTemplates est ajouté par Telerik. Dans ce dossier, il y a une vue de modèle appelée DateTime.ascx qui hérite de System.Web.Mvc.ViewUserControl. Le problème est que le modèle attend un DateTime normal. Pour le réparer, modifiez-le pour attendre une DateTime NULL comme suit:

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

Ceci résout le problème.

+0

Je n'utilise quoi que ce soit de Telerik, mais cette réponse m'a fait encore sur la bonne voie pour le message d'erreur que je recevais. Merci! –

+0

Salut Shea J'ai le même problème mais je n'utilise pas Telerik non plus. Comment avez-vous résolu votre problème? – Jacques

+0

@Jacques: Si vous n'avez pas résolu cela par vous-même, j'ai rencontré quelque chose de similaire et j'ai résolu le problème en ayant à la fois l'objet DateTimePicker et un objet DateTime dans la classe et en le repiquant après un appel TryUpdateModel. –

1

Vous devez également supprimer tous les modèles (non-nullable) que vous avez pu avoir auparavant pour le DateTime? modèle à frapper.

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

+0

Ah, excellent conseil, Jenn, merci. – Ozzy

Questions connexes