Seleccionar la lista desplegable no guarda la opción seleccionada - aplicación web central asp.net

Estoy tratando de guardar datos en una tabla, pero por alguna razón, el elemento Seleccionar de Html siempre guarda el primer elemento de la opción DateTime en lugar de guardar el que seleccioné.

Aquí selecciono la opción correspondiente a la fecha resaltada pero cuando guardo la información la primera opción (22-01-08) es la que está guardada en la tabla de la base de datos

Desplegable

Base de datos

Mi modelo de vista:

public class BookNowViewModel
{
    public string FilmeName { get; set; }      
    public DateTime FilmeDate { get; set; }
    public string seatNum { get; set; }
    public int Price { get; set; }
    public int FilmeId { get; set;  }  
}

Mi controlador, donde configuro las funciones, guarda los datos recuperados de la vista en la tabla "Carrito":

[HttpGet]
public  IActionResult BookNow(int Id)
{
    BookNowViewModel vm = new BookNowViewModel();
    var item =  _context.Filme.Where(a => a.Id == Id).FirstOrDefault();
    var it = _context.Sessao.Where(n => n.FilmeId == Id).FirstOrDefault();
    vm.FilmeName = item.Name;
    vm.FilmeDate = it.Date;
    vm.FilmeId = Id;
    vm.Price = Convert.ToInt32(item.Price);

    ViewBag.FilmeDate = _context.Sessao.Where(a => a.FilmeId == Id)
             .Select(i => new SelectListItem
             {
                 Value = i.Id.ToString(),
                 Text = i.Date.ToString()
             }).ToList();

    return  View(vm);
}
    
[HttpPost]
public async Task<IActionResult> BookNow(BookNowViewModel vm,int Id)
{   
    List<Cart> carts = new List<Cart>();
    string seatNum = vm.seatNum.ToString();
    int filmeId = vm.FilmeId;
    var filme = _context.Filme.Where(a => a.Id == Id).FirstOrDefault();
    var sessao = _context.Sessao.Where(n => n.FilmeId == Id).FirstOrDefault();

    string[] seatNumArray = seatNum.Split(",");
    count = seatNumArray.Length;

    if (checkSeat(seatNum, filmeId) == false)
    {
        foreach (var item in seatNumArray)
        {
            carts.Add(new Cart
            {
                Price = Convert.ToInt32(filme.Price),
                MovieId = vm.FilmeId,
                UserId = _userManager.GetUserId(HttpContext.User),
                Date = sessao.Date,
                seatNum = item
            });;
        }
        foreach (var item in carts)
        {
            _context.Cart.Add(item);
            await _context.SaveChangesAsync();
            //_context.SaveChanges();
        }
  
    TempData["Sucess"] = "Seat Booked, See your Cart";
    }
    else
    {
        TempData["seatnummsg"] = "Please Change you seat number";
    }

    return RedirectToAction("Index");            
}

Mi vista :

div class="col-md-4">
<form asp-action="BookNow" enctype="multipart/form-data">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <label asp-for="FilmeName" class="control-label"></label>
        @Model.FilmeName
        <span asp-validation-for="FilmeName" class="text-danger"></span>
    </div>

    <div class="form-group">
        <label asp-for="FilmeDate" class="control-label"></label>
        <select name="ok" id="FilmeDate" asp-for="FilmeDate" class="form-control" asp-items="ViewBag.FilmeDate"></select>
    </div>


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

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

    <div class="form-group">
        <input type="submit" value="Add to Cart" class="btn btn-default btn-success text-white" />
    </div>
</form>
Answer

Puedo ver un par de problemas aquí.

El elemento tiene el atributo <select>incorrecto . namePuede eliminar name="ok"(y la identificación) ya que el asistente de etiquetas asp-forestablecerá automáticamente los atributos namey . idDebería vincularse correctamente a la FilmeDatepropiedad si la cambia a:

<select asp-for="FilmeDate" class="form-control" asp-items="ViewBag.FilmeDate"></select>

Está llenando el ViewBag con fechas, pero está asignando el valor a la Idfecha no. Utilice la fecha en el campo de valor también:

...
    .Select(i => new SelectListItem
     {
         Value = i.Date.ToString(),
         Text = i.Date.ToString()
     }

Sin embargo, otro problema es que no está utilizando el valor del modelo de vista al guardar en la base de datos. Parece que está guardando un valor que acaba de leer de la base de datos: Date = sessao.Date. Debe usar el valor de ViewModel: Date = vm.FilmeDate.

...
    // only 1 for loop required
    foreach (var item in seatNumArray)
    {
        var cart = new Cart
        {    
            Price = Convert.ToInt32(filme.Price),
            MovieId = vm.FilmeId,
            UserId = _userManager.GetUserId(HttpContext.User),
            Date = vm.FilmeDate, // use the value selected the viewmodel
            seatNum = item
        };
        _context.Cart.Add(cart);                        
    }
    // save changes after adding all items
    await _context.SaveChangesAsync();

Solo necesita un bucle y puede guardar los cambios después de agregar todos los elementos también. Dado que ya no lo usa sessaoen el método Publicar, se puede eliminar.

Aparte: si está verificando la disponibilidad de asientos para una película en particular en checkSeat(seatNum, filmeId), es posible que también deba considerar la fecha de la película.