如何在编辑器模板上使用验证

时间:2014-04-13 20:07:43

标签: c# razor asp.net-mvc-5 mvc-editor-templates

我正在开发一个mvc5项目。 A生成了一个包含以下html / razor的视图:

<div class="form-group">
    @Html.LabelFor(model => model.Reservation.ReservationDate, new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Reservation.ReservationDate)
        @Html.ValidationMessageFor(model => model.Reservation.ReservationDate)
    </div>
</div>

我制作了一个EditorTemplate,因此我可以使用this datepicker:

@model DateTime?

<input id="@Html.IdForModel()" name="@Html.NameForModel()" value="@ViewData["Date"]" data-provide="datepicker" data-date-format="dd/mm/yyyy" data-date-autoclose="true" data-date-today-highlight="true" />

并在我的视图中包含了模板:

@Html.EditorFor(model => model.Reservation.ReservationDate, new { Date = @Model.Reservation.ReservationDate})

问题是,我失去了我通过模型中的数据注释定义的验​​证,因为

class="text-box single-line valid" type="date" data-val-required="The Datum field is required." data-val-date="The field Datum must be a date." data-val="true"

被EditorTemplate覆盖。我可以在我的模板中包含该代码,但这种方式是硬编码的。对我来说,这不是一个选择。

所以我想知道,我怎样才能以更好的方式添加这些html注释?

这是我的模型的属性,其DataAnnotions:

[UIHint("DatePicker")]
[DisplayName("Date")]
[DataType(DataType.Date, ErrorMessage="Not a valid date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
public DateTime ReservationDate { get; set; }

1 个答案:

答案 0 :(得分:0)

您正在通过创建输入HTML元素而不是使用Html.TextBoxFor()为自己创建一些额外的工作。试着这样做:

@Html.TextBoxFor(model => model, new { @class = "fieldDate", @Value = Model.HasValue ? Model.Value.ToString("MM/dd/yyyy") : "" }) 

在您的javascript代码中:

$('.fieldDate').datepicker({
    format: "dd/mm/yyyy", 
    autoclose: true, 
    todayHighlight: true
});

此外,jquery datepicker()方法是否会覆盖HTML属性?