HTML datepicker value not being saved correclt in controller

Grant Meyer 0 Reputation points
2023-07-20T13:22:34.2933333+00:00

Hi there

I have an asp.net core web application with a datepicker on my view, I'm using model binding to pass the data to the controller method which creates my data. This all works 100% except for my date value from the datepicker, its saved in the database as "0001-01-01 00:00:00.0000000" and I cant figure out what i'm doing wrong. Below a code snippet from the view and controller method.

@using (Html.BeginForm("PlaceOrder", "CustomerOrders", FormMethod.Post))
{
<div class="container" style="margin-top: 1%;">
    <div class="row">
        <div class="col-md-12 d-flex justify-content-between align-items-center">
            <h3 class="custom-header">New Order</h3>
                <div id="deliveryDateContainer" class="d-flex align-items-center" style="white-space: nowrap;">
                    <label for="DateRequired" class="me-2">Date Required:</label>
                    <input type="date" id="DateRequired" asp-for="OrderHeaderModel.DateRequired" asp-format="{0:yyyy-MM-ddTHH:mm}" class="form-control" style="padding-right: 50px">
                </div>
        </div>
    </div>
</div>
            var orderHeader = new CustomerOrderHeaderModel
            {
                OrderId = Guid.NewGuid(),
                OrderDate = DateTime.Now,   
                CustomerId = customerId,
                OrderNumber = newOrderNumber.ToString(),
                OrderStatus = "Placed",
                TotalAmount = orderModel.OrderLinesModels.Sum(l => l.UnitPrice * l.OrderQty),
                DateRequired = orderModel.OrderHeaderModel.DateRequired,
                Notes = orderModel.OrderHeaderModel.Notes,  
            };

Thank you in advance

Developer technologies | ASP.NET | ASP.NET Core
Developer technologies | C#
{count} votes

2 answers

Sort by: Most helpful
  1. Grant Meyer 0 Reputation points
    2023-07-20T15:00:03.51+00:00

    Thank you for your feedback AgaveJoe
    I've made 100% sure to select a date from the datepicker before placing the order. Below is my customerOrderHeaderModel and my full controller method and service. Please let me know if you need any further info, i'm stumped on this one.

    public partial class CustomerOrderHeaderModel
    {
        [Key]
        [DisplayName("Order Id:")]
        public Guid OrderId { get; set; }
    
        [DisplayName("Order Date:")]
        public DateTime OrderDate { get; set; }
    
        [DisplayName("Customer Id:")]
        public Guid CustomerId { get; set; }
    
        [DisplayName("Order No:")]
        public string OrderNumber { get; set; } = null!;
    
        [DisplayName("Order Status:")]
        public string OrderStatus { get; set; } = null!;
    
        [DisplayName("Total Amount:")]
        public decimal TotalAmount { get; set; }
    
        [DisplayName("Notes:")]
        public string? Notes { get; set; }
    
        [DisplayName("Date Required:")]
        [BindProperty, DataType(DataType.Date)]
        public DateTime DateRequired { get; set; }
    
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int TempOrderId { get; set; }    
    }
    
    
    
            [HttpPost]
            public async Task<IActionResult> PlaceOrder(CustomerOrderViewModel orderModel)
            {
                var orderNumber = await _customerOrdersService.PlaceOrder(orderModel.OrderHeaderModel.CustomerId, orderModel);
    
                TempData["NotificationType"] = "success";
                TempData["Notification"] = $"Order placed successfully. Your order number is: {orderNumber}.";
    
                return RedirectToAction("NewCustomerOrderProductList", "CustomerProducts");   
            }
    
            public async Task<string> PlaceOrder(Guid customerId, CustomerOrderViewModel orderModel)
            {
                var newOrderNumber = await GenerateOrderNumber();
    
                var orderHeader = new CustomerOrderHeaderModel
                {
                    OrderId = Guid.NewGuid(),
                    OrderDate = DateTime.Now,   
                    CustomerId = customerId,
                    OrderNumber = newOrderNumber.ToString(),
                    OrderStatus = "Placed",
                    TotalAmount = orderModel.OrderLinesModels.Sum(l => l.UnitPrice * l.OrderQty),
                    DateRequired = orderModel.OrderHeaderModel.DateRequired,
                    Notes = orderModel.OrderHeaderModel.Notes,  
                };
    
                await _orderHeaderRepository.CreateOrderHeaderAsync(orderHeader);
    
    

  2. Bruce (SqlWork.com) 77,926 Reputation points Volunteer Moderator
    2023-07-20T15:24:43.0566667+00:00

    You don’t have code to check if the postback model is valid. If you did and displayed the error, you would probably see that the date was not a valid format.


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.