首页 > 解决方案 > 在 MVC 视图中更改 DropDownListFor 中 SelectList 的输出值

问题描述

我的表单中有这段代码:

<div class="form-group">
        @Html.LabelFor(c => c.ClosingHourId)
        @Html.DropDownListFor(c => c.ClosingHourId, new SelectList(Model.ClosingHours, "Id", "Time"), "Select time", new { @class = "form-control" })
        @Html.ValidationMessageFor(c => c.ClosingHourId)
    </div>

“时间”属性的类型是 DateTime,所以当我单击页面上的下拉列表时,我会看到完整的日期和时间,但问题是我只想显示小时数,没有日期,所以我想使用类似Time.ToString("H:mm")但我不知道我在哪里可以写这个,所以它会起作用。也许正确的方法是[Display(Name = Time.ToString("H:mm"))]在我的 ClosingHour 模型中添加注释之类的东西?我不确定这是否可能。

我的视图模型:

public class CinemaFormViewModel
    {
        public int? Id { get; set; }

        [Required]
        [StringLength(255)]
        public string Name { get; set; }

        [Required]
        public string Address { get; set; }

        [Required]
        [Display(Name = "Total Seats")]
        public int TotalSeats { get; set; }

        public IEnumerable<OpeningHour> OpeningHours { get; set; }

        [Required]
        [Display(Name = "Opens At")]
        public byte? OpeningHourId { get; set; }

        public IEnumerable<ClosingHour> ClosingHours { get; set; }

        [Required]
        [Display(Name = "Closes At")]
        public byte? ClosingHourId { get; set; }
}

我的 ClosingHour 模型:

public class ClosingHour
    {
        public byte Id { get; set; }

        [Required]
        public DateTime Time { get; set; }
    }

控制器内部调用视图的操作:

public ActionResult New()
        {
            var openingHours = _context.OpeningHours.ToList();
            var closingHours= _context.ClosingHours.ToList();

            var viewModel = new CinemaFormViewModel
            {
                OpeningHours = openingHours,
                ClosingHours = closingHours
            };
            return View("CinemaForm", viewModel);
        }

标签: c#asp.net-mvchtml.dropdownlistforselectlist

解决方案


通过添加字符串时间属性来改变你

public class ClosingHour
    {
        public byte Id { get; set; }

        [Required]
        public DateTime Time { get; set; }

        [NotMapped]
        public string ShortTime { get; set; }
    }

行动

public ActionResult New()
        {

  var closingHours= _context.ClosingHours.ToList();
 var openingHours = _context.OpeningHours.ToList();
          
closingHours.ForEach(i=> i.ShortTime=i.Time.ToShortTimeString());
openingHours.ForEach(i=> i.ShortTime=i.Time.ToShortTimeString());

// or you can try
closingHours.ForEach(i=> { 
                i.ShortTime=i.Time.ToShortTimeString();
                i.Time=null;
                 });
openingHours.ForEach(i=> { 
                i.ShortTime=i.Time.ToShortTimeString();
                i.Time=null;
                 });

  var viewModel = new CinemaFormViewModel
   {
 OpeningHours = openingHours,
  ClosingHours = closingHours
   };
            return View("CinemaForm", viewModel);
 }

看法

....
  @Html.DropDownListFor(c => c.ClosingHourId, 
new SelectList(Model.ClosingHours, "Id", "ShortTime"), "Select time", new { @class = "form-control" })
.....

推荐阅读