2016-06-16 8 views
0

Ich habe folgendes Modell und Viewmodel, beachten Sie ExpiryDate NULL-Werte zugelassen:ASP MVC 5 kann nicht hinzugefügt bis Format EditorTemplate Um Datepicker Bound Mit

public class Topic 
{ 
    public DateTime? ExpiryDate { get; set; } 

    // Other properties 
} 

public class TopicViewModel 
{ 
    public DateTime? ExpiryDate { get; set; } 

    // Other properties 
} 

In meinem Controller bearbeiten Methode, die ich das Datum setze wie folgt in machen meine Sicht. Die Ansicht verwendet eine Editor-Vorlage ein Textfeld mit der pikaday Datepicker-Widget zu binden, wie folgt:

// Controller method 
public ActionResult EditTopic(Guid id) 
{ 
    var topic = _contect.GetTopic(id); 

    var viewModel = new TopicViewModel 
    { 
     ExpiryDate = topic.ExpiryDate 

     // Other mappings 
    }; 

    return View(viewModel); 
} 

EditorTemplate- datepicker.cshtml

@model Nullable<System.DateTime> 
<link rel="stylesheet" href='/content/pikaday/css/pikaday.css' /> 
<script src='/content/pikaday/moment.min.js'></script> 
<script src='/content/pikaday/pikaday.js'></script> 
<script src="/content/pikaday/plugins/pikaday.jquery.js"></script> 

<script type="text/javascript"> 
    $(function() { 
     $('.datepicker').pikaday({ 
      firstDay: 1, 
      format: "DD MMM YYYY" 
     }); 

    }); 
</script> 

@Html.TextBox(string.Empty, ViewData.TemplateInfo.FormattedModelValue, new { @class = "datepicker form-control" }) 

Das ist meine Ansicht - EditTopic.cshtml

<div class="form-group"> 
    @Html.LabelFor(model => model.ExpiryDate) 
    @Html.EditorFor(model => model.ExpiryDate) 
    @Html.ValidationMessageFor(model => model.ExpiryDate) 
</div> 

Während der Datepicker verdrahtet wird und alles funktioniert, aber das Datum wird nicht im Format 'DD MMM YYYY' in der Textbox angezeigt, sobald es von der Datenbank zurückgegeben wird.

ZB wenn ich ein ExpiryDate als 2016.05.17 gespeichert, wenn es für die Bearbeitung als 17. Januar 0000

angezeigt ist zurückgegeben

Wie kann ich das Datum zu formatieren als DD MMM YYYY erhalten, wenn es nicht null ist ?

+0

Sie können ExpiryDate Eigenschaft im Modell bearbeiten und prüfen, ob es den gewünschten Wert null und zurück ist. – riteshmeher

+0

Skripte sollten niemals in 'EditorTemplate' stehen - verschieben Sie sie in die Hauptansicht oder das Layout. –

+0

@ Stephen mit dem Skript in der Editor-Vorlage hat keine Auswirkungen auf mein Problem. Wenn Sie es in ein Layout verschieben, wird das Formatierungsproblem nicht gelöst. – adam78

Antwort

0

, indem folgende Daten Attribut zu meinem Viewmodel zu beheben Managed:

[DisplayFormat(DataFormatString = "{0:d MMM yyyy}", ApplyFormatInEditMode = true)] 
public DateTime? ExpiryDate { get; set; }