使用DataAnnotations从模型显示AM PM中的时间

时间:2015-04-27 22:24:21

标签: sql-server asp.net-mvc

我正在尝试在AM和PM中显示Sql Server时间字段。它在编辑模式下正确显示,但在列表模式下不显示。 型号:

    public class HMSappointmentMetaData
{
    public int ID { get; set; }
    [Required(ErrorMessage = "Rep Name is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string Rep { get; set; }
    [Required(ErrorMessage = "Customer Name is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string Name { get; set; }
    [Required(ErrorMessage = "Address is required")]
    [StringLength(100, ErrorMessage = "Max length is 100")]
    public string Address { get; set; }
    [Required(ErrorMessage = "City is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string City { get; set; }
    [Required(ErrorMessage = "Zip is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string ZipCode { get; set; }
    [Required(ErrorMessage = "County is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string County { get; set; }
    [Required(ErrorMessage = "Home Phone is required")]
    [StringLength(10, ErrorMessage = "Max length is 10")]
    public string HomePhone { get; set; }
    [Required(ErrorMessage = "Mobile Phone is required")]
    [StringLength(10, ErrorMessage = "Max length is 10")]
    public string CellPhone { get; set; }
    [Required(ErrorMessage = "Question is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string OwnHome { get; set; }
    [Required(ErrorMessage = "Question is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string HaveAttic { get; set; }
    [Required(ErrorMessage = "Question is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string AvgElectric { get; set; }
    [Required(ErrorMessage = "Question is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string SummerSpike { get; set; }
    [Required(ErrorMessage = "Question is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string TriedAny { get; set; }
    [Required(ErrorMessage = "Question is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string InsulationType { get; set; }
    [Required(ErrorMessage = "Question is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string InsulationAge { get; set; }
    [Required(ErrorMessage = "Question is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string LastPaint { get; set; }
    [Required(ErrorMessage = "Question is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string Married { get; set; }
    public string Spouse { get; set; }
    [Required(ErrorMessage = "Occupation is required")]
    [StringLength(50, ErrorMessage = "Max length is 50")]
    public string Job { get; set; }
    public string SpouseJob { get; set; }
    public string RetireFrom { get; set; }
    public string SpouseRetireFrom { get; set; }
    [Required(ErrorMessage = "Appointment Date is required")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> Date { get; set; }
    [Required(ErrorMessage = "Appointment Time is required")]
    [DataType(DataType.Time)]
    [DisplayFormat(DataFormatString = "{0:hh\\:mm}", ApplyFormatInEditMode = true)]
    public Nullable<System.TimeSpan> Time { get; set; }
    [DisplayFormat(DataFormatString = "{0:hh\\:mm tt}")]
    public System.TimeSpan? TimeForDisplay { get { return (Time.HasValue) ? (System.TimeSpan?)DateTime.Now.TimeOfDay.Add(Time.Value) : null; } }
    public HMSappointmentMetaData()
    {
        Time = new TimeSpan(14,30,0);
    }

    [DataType(DataType.MultilineText)]
    public string Comments { get; set; }
    public string CreditScore { get; set; }
}

列表视图:

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>

        <th>
            @Html.DisplayNameFor(model => model.City)
        </th>

        <th>
            @Html.DisplayNameFor(model => model.Date)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Time)
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>

            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.City)
            </td>

            <td>
                @Html.DisplayFor(modelItem => item.Date)
            </td>
            <td>
                @Html.DisplayFor(model => model.TimeForDisplay)
            </td>

            <td>
                @Html.ActionLink("Notes", "Index", "AdminNotes", new { AppointmentID = item.ID }, null) |
                @Html.ActionLink("Edit", "Edit", new { id = item.ID }) |
                @Html.ActionLink("Details", "Details", new { id = item.ID }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.ID })
            </td>
        </tr>
    }

</table>

这导致24小时时间(14:30)

修改视图:

@Html.EditorFor(model => model.Time)

显示格式正确的时间(下午2:30)。

1 个答案:

答案 0 :(得分:1)

我知道它不理想,但没有一点额外的工作,我无法让它工作,所以这里是选项

选项1

使用DisplayTemplate并手动格式化。

选项2 - 我更喜欢这个。

将此新属性添加到ViewModel

[DisplayFormat(DataFormatString = "{0:hh\\:mm tt}")]
public DateTime? TimeForDisplay 
{
  get { return (Time.HasValue)? (DateTime?)DateTime.Today.Add(Time.Value):null;}
}

在视图中使用此新显示属性,如下所示

@Html.DisplayFor(model => model.TimeForDisplay)

以下是演示 Link