Search code examples
asp.net-coreentity-framework-corerazor-pagesmodel-binding

ASP.Net core Model's date property is blank in edit mode


I have a Razor pages web app and one of the models' is for colleague info and includes their date of birth.

When I look at the scaffolded pages for a colleague, the Date of Birth field is populated in the details page but not the edit page.

Images below will show what I mean.

Here is the Details page

Colleague Detail Page

And here is the Edit page

Colleague Edit Page

As you will know, as the Edit page is blank, If I change another field e.g. Staff Position and save, the DOB for the colleague becomes null.

As I say the pages are from the EF Core scaffolding so I believe the HTML for the form should be correct.

Edit Page HTML

<div class="form-group">
                <label asp-for="Colleague.DateOfBirth" class="control-label"></label>
                <input asp-for="Colleague.DateOfBirth" class="form-control" />
                <span asp-validation-for="Colleague.DateOfBirth" class="text-danger"></span>
            </div>

Colleague is a bind Property of the Colleague model in the Page Model. ALl other fields, as seen in the image populate fine.

Update

As I say it is using Model Binding

[BindProperty]
public Colleague Colleague { get; set; }

OnPost


public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.Attach(Colleague).State = EntityState.Modified;

            try
            {
                selectedBranch = Colleague.BranchID;
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ColleagueExists(Colleague.ColleagueID))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return RedirectToPage("../BranchColleagues", new { id = selectedBranch });
        }
[DataType(DataType.Date)]
        [Display(Name = "Date of Birth")]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime? DateOfBirth { get; set; }

Solution

  • I am placing my quick fix solution as the question has been empty now for a month.

    By removing this annotation from the POCO class:

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    

    The date value now appears in the edit form as required.