2010-07-20 3 views
1

Dans le besoin des champs de date divisés pour dob (comme le formulaire d'inscription facebook) dans mon projet en cours. J'ai actuellement une solution de travail mais cette solution me semble un peu "sale".Comment gérer les champs de date divisés (année, mois, jour) dans ASP.NET MVC

Ma solution est un DTO pour la date fractionnée et un modèle d'éditeur pour ce type.

public class SplittedDate 
    { 
     public int Day { get; set; } 
     public int Month { get; set; } 
     public int Year { get; set; } 

     public SplittedDate() 
      : this(DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year) 
     { 
     } 

     public SplittedDate(DateTime date) 
      : this(date.Day, date.Month, date.Year) 
     { 
     } 

     public SplittedDate(int day, int month, int year) 
     { 
      ValidateParams(day, month, year); 
      Day = day; 
      Month = month; 
      Year = year; 
     } 

     public DateTime AsDateTime() 
     { 
      ValidateParams(Day, Month, Year); 
      return new DateTime(Year, Month, Day); 
     } 

     private void ValidateParams(int day, int month, int year) 
     { 
      if (year < 1 || year > 9999) 
       throw new ArgumentOutOfRangeException("year", "Year must be between 1 and 9999."); 
      if (month < 1 || month > 12) 
       throw new ArgumentOutOfRangeException("month", "Month must be between 1 and 12."); 
      if (day < 1 || day > DateTime.DaysInMonth(year, month)) 
       throw new ArgumentOutOfRangeException("day", "Day must be between 1 and max days in month."); 
     } 
    } 

L'éditeur de code de modèle:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SplittedDate>" %> 
<%= Html.TextBox("Day", 0, new { @class = "autocomplete invisible" })%> 
<%= Html.TextBox("Month", 0, new { @class = "autocomplete invisible" })%> 
<%= Html.TextBox("Year", 0, new { @class = "autocomplete invisible" })%> 

est-il une meilleure solution plus élégante pour ce genre de problème? Peut-être une chose custombinder personnalisé?

Merci à l'avance

Répondre

3

Scott Hansleman écrit sur exactement la même question et a conçu un DateAndTimeModelBinder, blog post here. Cependant il y a une touche d'écriture plus à faire vu la quantité de code que ce qu'elle apporte à la fête!

+0

Oui, je connais la publication. Mais j'espérais qu'il y aurait une autre solution avec moins de code :-) –

Questions connexes