Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Problemas com validação de datas

Bom dia!

Estou validando as datas na parte de busca da aplicação. O campo de data só aceita o formato americano (ano/mês/dia). Mudei nas propriedades conforme abaixo, mas continua só passando no formato americano.

`` [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] [DataType(DataType.Date, ErrorMessage="Data no formato inválido")] public DateTime? DataMinima { get; set; }

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] [DataType(DataType.Date, ErrorMessage = "Data no formato inválido")] public DateTime? DataMaxima { get; set; } ``

Está faltando alguma informação? Outra coisa é que a mensagem de erro está ainda em inglês (coloquei uma no ErrorMessage): The value '20/05/2007' is not valid for DataMinima. Como colocar em português? Quando coloco a data no formato americano correto ele não coloca o campo mais em vermelho, mas a mensagem continua abaixo, como tirar?

Obrigado.

4 respostas

Oi Luis!

Poste o código da view e do controller que você está usando pra fazer essa busca, por favor(:

Oi Gabriel, boa tarde!

Seguem os códigos:

Model:

public class BuscaMovimentacoesModel
    {
        public decimal? ValorMinimo { get; set; }

        public decimal? ValorMaximo { get; set; }

        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [DataType(DataType.Date, ErrorMessage="Data no formato inválido")]
        public DateTime? DataMinima { get; set; }

        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [DataType(DataType.Date, ErrorMessage = "Data no formato inválido")]
        public DateTime? DataMaxima { get; set; }

        public Tipo? Tipo { get; set; }

        public int? UsuarioId { get; set; }

        public IList<Movimentacao> Movimentacoes { get; set; }

        public IList<Usuario> Usuarios { get; set; }

    }

Controller:

public ActionResult Busca(BuscaMovimentacoesModel model)
        {

                model.Usuarios = usuaDAO.Lista();
                model.Movimentacoes = moviDAO.Busca(model.ValorMinimo, model.ValorMaximo,
                                        model.DataMinima, model.DataMaxima,
                                        model.Tipo, model.UsuarioId);
                return View(model);

        }

View:

@model Financas.Models.BuscaMovimentacoesModel

<h2>Busca de movimentações</h2>

@using (Html.BeginForm("Busca", "Movimentacao", FormMethod.Get))
{
    <div class="row">

        <fieldset>
            <legend>Valor da movimentação</legend>
            <div class="col-sm-6">
                @Html.LabelFor(b => b.ValorMinimo, "Mínimo")
                @Html.TextBoxFor(b => b.ValorMinimo, new { @class = "form-control" })
            </div>
            <div class="col-sm-6">
                @Html.LabelFor(b => b.ValorMaximo, "Máximo")
                @Html.TextBoxFor(b => b.ValorMaximo, new { @class = "form-control" })
            </div>
        </fieldset>

        <fieldset>
            <legend>Data da movimentação</legend>
            <div class="col-sm-6">
                @Html.LabelFor(b => b.DataMinima, "Mínima")
                @Html.TextBoxFor(b => b.DataMinima, new { @class = "form-control" })
                @Html.ValidationMessageFor(b => b.DataMinima)
            </div>
            <div class="col-sm-6">
                @Html.LabelFor(b => b.DataMaxima, "Máxima")
                @Html.TextBoxFor(b => b.DataMaxima, new { @class = "form-control" })
                @Html.ValidationMessageFor(b => b.DataMinima)
            </div>
        </fieldset>


        <fieldset>
            <legend>Usuário e tipo</legend>
            <div class="col-sm-6">
                @Html.LabelFor(b => b.Tipo, "Tipo")
                @Html.EnumDropDownListFor(b => b.Tipo, new { @class = "form-control" })
            </div>
            <div class="col-sm-6">

                @Html.LabelFor(b => b.UsuarioId, "Usuário")
                @Html.DropDownListFor(b => b.UsuarioId,
                    new SelectList(Model.Usuarios, "Id", "Nome"), "Escolha um usuário", new { @class = "form-control" })
            </div>
        </fieldset>
    </div>


    <input type="submit" value="Buscar" />
}


<table class="table table-hover">
    <tr>
        <th>Id</th>
        <th>Data</th>
        <th>Valor</th>
        <th>Tipo</th>
        <th>Usuário</th>
    </tr>
    @foreach (var m in Model.Movimentacoes)
    {
        <tr>
            <td>@m.Id</td>
            <td>@m.Data</td>
            <td>@m.Valor</td>
            <td>@m.Tipo</td>
            <td>@m.Usuario.Nome</td>
        </tr>
    }
</table>

Obrigado!

solução!

Quando você está trabalhando com formulários usando o método GET ao invés de POST, por padrão o navegador trata as datas no formato americano. Nessa linha da sua view:

@using (Html.BeginForm("Busca", "Movimentacao", FormMethod.Get))

Troque para o método post e veja se resolve:

@using (Html.BeginForm("Busca", "Movimentacao", FormMethod.Post))

Muito bom Gabriel! Funcionou perfeitamente!

Uma coisa que ainda não está funcionando é a mensagem de erro que está ainda em inglês (coloquei uma no ErrorMessage): The value 'blablabla' is not valid for DataMinima.

Sabe como colocar em português?

Obrigado.