Pergunta

Estou trabalhando em um projeto mvc5.A gerou uma visualização contendo o seguinte 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>

Fiz um EditorTemplate para poder usar esse selecionador de data:

@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" />

e incluí o modelo na minha opinião:

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

O problema é que perco a validação que defini através da anotação de dados no meu modelo, porque

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"

é substituído pelo EditorTemplate.Eu poderia incluir esse código no meu modelo, mas dessa forma ele será codificado.Para mim, isso não é uma opção.

Então, eu queria saber como posso adicionar essas anotações HTML de uma maneira melhor?

Esta é a propriedade do meu modelo, com seus 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; }
Foi útil?

Solução

Você está criando um pouco mais de trabalho criando o elemento HTML de entrada em vez de usar Html.TextBoxFor().Tente fazer isso:

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

No seu código javascript:

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

Além disso, o método jquery datepicker() substitui os atributos HTML?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top