ASP .NET 将日期时间值从视图传递到控制器

时间:2021-05-03 12:37:41

标签: c# asp.net-core-mvc

在视图模式下,我尝试填写并获取日期,结果总是为空,但例如,填写了字符串字段。如果我不使用ViewModel,但只有预订模型,日期填写。我希望日期也用viewmodel填写...

控制器:

public async Task<IActionResult> CheckOut3(CheckoutModel broom)
{

    if (ModelState.IsValid)
    {
        _context.Add(broom);

        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }

    return View(broom);
}

型号:

  public class Booking
  {
        public int Id { get; set; }
        public Room Room { get; set; }
        public string LastName { get; set; }
        public string FirstName { get; set; }

        [DisplayFormat(ApplyFormatInEditMode =true, DataFormatString = "{0:yyyy-MM-dd}")]
        public DateTime? CheckInDate{ get; set; }
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
        public DateTime? CheckOutDate { get; set; }
  }

视图模型:

public class CheckoutModel
{
    public Booking booking {get; set;}
    public Room room { get; set; }

}

查看:

<form asp-action="Checkout3">
    <div class="row">
        <!--Grid column-->
        <div class="col-lg-6 col-md-12 mb-4">
            <label asp-for="booking.CheckInDate">CheckIn</label>
            <input asp-for="booking.CheckInDate" class="form-control" type="datetime-local" name="CheckInDate" />
            <span asp-validation-for="booking.CheckInDate" class="text-danger"></span>
        </div>
        <!--Grid column-->
        <div class="col-lg-6 col-md-6 mb-4">
            <label asp-for="booking.CheckOutDate">CheckOut</label>
            <input asp-for="booking.CheckOutDate" class="form-control" type="date" name="CheckOutDate" />
            <span asp-validation-for="booking.CheckOutDate" class="text-danger"></span>
        </div>
    </div>
    <div class="form-group">
        <input type="submit" value="Checkout" class="btn btn-primary" />
    </div>
</form>

1 个答案:

答案 0 :(得分:0)

问题是,您在 html 表单中发布了 CheckInDateCheckOutDate,而它应该是 booking.CheckInDatebooking.CheckOutDate。删除视图中的名称,因此 name 将设置为 asp-for 中提供的值。

<!--Grid column-->
<div class="col-lg-6 col-md-12 mb-4">
    <label asp-for="booking.CheckInDate">CheckIn</label>
    <input asp-for="booking.CheckInDate" class="form-control" type="datetime-local" />
    <span asp-validation-for="booking.CheckInDate" class="text-danger"></span>
</div>
<!--Grid column-->
<div class="col-lg-6 col-md-6 mb-4">
    <label asp-for="booking.CheckOutDate">CheckOut</label>
    <input asp-for="booking.CheckOutDate" class="form-control" type="date" />
    <span asp-validation-for="booking.CheckOutDate" class="text-danger"></span>
</div>
相关问题