Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Format Date On Binding (ASP.NET MVC)

Tags:

asp.net-mvc

In my ASP.net MVC app I have a view that looks like this:

... <label>Due Date</label> <%=Html.TextBox("due")%> ... 

I am using a ModelBinder to bind the post to my model (the due property is of DateTime type). The problem is when I put "01/01/2009" into the textbox, and the post does not validate (due to other data being input incorrectly). The binder repopulates it with the date and time "01/01/2009 00:00:00".

Is there any way to tell the binder to format the date correctly (i.e. ToShortDateString())?

like image 311
Corin Blaikie Avatar asked Sep 25 '08 14:09

Corin Blaikie


1 Answers

I just came across this very simple and elegant solution, available in MVC 2:

http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx

Basically if you are using MVC 2.0, use the following in your view.

 <%=Html.LabelFor(m => m.due) %>  <%=Html.EditorFor(m => m.due)%> 

then create a partial view in /Views/Shared/EditorTemplates, called DateTime.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>" %> <%=Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" }) %> 

When the EditorFor<> is called it will find a matching Editor Template.

like image 112
Nick Chadwick Avatar answered Sep 22 '22 06:09

Nick Chadwick