Pergunta

I have a Person class with a BornDate property in my model defined as

[DisplayName("Born Date")]
public DateTime? BornDate { get; set; }

I use this field in my view as

<td style="white-space:nowrap">
    <%= Html.LabelFor(model => model.BornDate)%>
    <br />
    <%= Html.TextBoxFor(model => model.BornDate, new { id = "bornDate" })%>
    <%= Html.ValidationMessageFor(model => model.BornDate, "*")%>
</td>

The problem is that when I am editing a Person instance with the BornDate text box is formatted as

dd/MM/yyyy hh.mm.ss

while I would like to format it without the time part ("dd/MM/yyyy"). I am not able to use the toString method with the format string because it is a nullable field.

what can I do?

Foi útil?

Solução

You should be able to use Value. Just check it isn't null first.

var displayDate = model.BornDate.HasValue ? model.BornDate.Value.ToString("yyyy") : "NoDate";

Outras dicas

I know this is very late but I was researching another problem and came across this issue. There is a way to only show the date part which does not require presentation layer formatting.

[DisplayName("Born Date")]
[DataType(DataType.Date)]
public DateTime? BornDate { get; set; }

Using this will ensure that everywhere you bind to this property on your View, only the date will show

Hope this helps somebody

To do this in your VIEW, you can use Razor syntax, as well:

 @Html.TextBox("BornDate", item.BornDate.HasValue ? item.BornDate.Value.ToShortDateString():"") 

You can do this, it will work with Nullable model types:

@model DateTime?
@{
    object txtVal = "";
    if (Model.HasValue) 
    {
        txtVal = Model.Value;
    };
}
@Html.TextBoxFor(x => Model, new {Value = string.Format(ViewData.ModelMetadata.EditFormatString, txtVal))

Another way I've tackled this issue is by adding format to the TextBoxFor

@Html.TextBoxFor(model => model.BornDate, "{0:MM/dd/yyyy}", new { id = "bornDate" })
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top