7

How do I prevent the time from showing up when using the jQuery .datepicker()? Below is the section of the model for the two attributes (date taken and expiration date)

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
    [DisplayName("Expiration Date")]
    public string ExpirationDate { get; set; }

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
    [DisplayName("Date Taken")]
    public string DateTaken { get; set; }

This works fine using the @Html.EditorFor control on the view I'm working on. However, when I change that control from this:

 @Html.EditorFor(model => model.DateTaken)

to this:

@Html.TextBoxFor(m => m.DateTaken, new { id = "dtkn" })

in order to get this to work (label which control has the datepicker applied to it):

<script>
    $(function () {
        $("#dtkn").datepicker('setDate');
        $("#exp").datepicker('setDate');
    });

    $.datepicker.setDefaults({
        buttonImageOnly: true,
        buttonImage: '<%=Url.Content("~/Content/images/magnify.gif") %>',
        defaultDate: -1,
        gotoCurrent: true,
        prevText: "<< Prev",
        nextText: "Next >>"
    });
</script>

suddenly the time begins to show up. Any suggestions?

EDIT

I have tried the following formats and none will work:

$("#dtkn").datepicker({ dateFormat: 'dd-mm-yy' }).val();
$("#dtkn").datepicker({ dateFormat: 'yy-mm-dd' });
$("#dtkn").datepicker('getDate').format('yyyyMMdd');

and this:

$("#dtkn").datepicker('getDate').datepicker('dd/mm/yy');
$('#dtkn').datepicker('option', { dateFormat: 'd MM y' });

Here is the error I'm seeing the Chrome debugging console:

Uncaught TypeError: Cannot call method 'datepicker' of null 
NealR
  • 10,189
  • 61
  • 159
  • 299

3 Answers3

15

Edit: MVC4 users can use this

You want this overload

@Html.TextBoxFor(m => m.DateTaken, "{0:MM/dd/yyyy}", new { id="dtkn" })

If you're willing to give up on the helper just to it manually

<input type="text" value="@Model.DateTaken.ToString("MM/dd/yyyy")" id="dtkn" />
Jasen
  • 14,030
  • 3
  • 51
  • 68
  • I get the error `No overload for method 'TextBoxFor' takes 3 arguments` – NealR Mar 29 '13 at 19:53
  • Sorry, missed MVC3. Try http://stackoverflow.com/questions/5972536/html-textboxfor-formatting-or-html-editorfor-htmlattributes – Jasen Mar 29 '13 at 19:55
  • this seems to be the most sensitive approach if you don't want to mess with existing markup and/or view model – JayJay Oct 31 '18 at 20:42
4

By using @Html.TextBox as opposed to @Html.TextBoxFor I was able to find an overload that works.

@Html.TextBox("DateTaken", Model.DateTaken.ToString("MM/dd/yyyy"), new { id = "dtkn" })
NealR
  • 10,189
  • 61
  • 159
  • 299
0

@Html.TextBoxFor(m => m.DateTaken,"{0:d/M/yyyy}", new { id = "dtkn" })

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d/M/yyy}")] [DisplayName("Date Taken")] public string DateTaken { get; set; }

Cuteboy_Max
  • 131
  • 1
  • 4