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()
)?
Try this
I find the best way to do this is to reset the ModelValue
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.
then create a partial view in /Views/Shared/EditorTemplates, called DateTime.ascx
When the EditorFor<> is called it will find a matching Editor Template.
I guess personally I'd say its best or easiest to do it via a strongly typed page and some defined model class but if you want it to be something that lives in the binder I would do it this way:
And then use that in the view when creating the textbox i.e. :
Hope that helps.
It's a dirty hack, but it seems to work.
You get the model binding, and are able to override the HTML "value" property of the text field with a formatted string.
In order to get strongly typed access to your model in the code behind of your view you can do this:
Where T is the ViewData type that you want to pass in from your Action.
Then in your controller you would have an action :
After that you have nice strongly typed model data in your view so you can do :