none
Falha ao exibir campos de data, hora e valor na view RRS feed

  • Pergunta

  • Bom dia Pessoa,

    Estou com um problema para exibir data e hora que estão gravados no banco na view.

    No banco tenho dois campos:

    DataInicio: (datetime) 1998-11-16 00:00:00.000

    DataFim: (datetime): 1998-11-16 00:00:00.000

    HorarioEntrada (time): 09:00:00.0000000

    HorarioSaida (time): 18:00:00.0000000

    ValorHora (money): 50.00

    Os campos de valor e data não estão sendo exibidos.

    E no HorarioEntrada esta ocorrendo exception: Input string was not in correct format

    Model

    public class ContratoViewModel
        {
            [Key]
            public int ContratoID { get; set; }
            [Required(ErrorMessage = "Informe o cliente")]
            [Display(Name = "Cliente")]
            public int ClienteID { get; set; }
    
            [Required(ErrorMessage = "Informe o número de contrato ou proposta")]
            [Display(Name = "Contrato/Proposta")]
            public string NumeroReferencia { get; set; }
    
            [Required(ErrorMessage = "Informe a modalidade de contrato")]
            [Display(Name = "Modalidade de contrato")]
            public string ModalidadeContrato { get; set; }
    
            [Required(ErrorMessage = "Informe a modalidade de apuração de horas")]
            [Display(Name = "Modalidade de apuração")]
            public string ModalidadeApuracao { get; set; }
    
            [Range(0,200,ErrorMessage ="Valor deve estar entre {1} e {2}")]
            [RegularExpression("^[0-9]*$", ErrorMessage = "Informe somente números")]
            [Display(Name = "Quantidade horas/mês")]
            public int? QtdHorasMes { get; set; }
    
            [Display(Name = "Apuração de horas extras")]
            public bool ApuracaoHoraExtra { get; set; }
    
            [DataType(DataType.Currency)]
            [Range(0, 100, ErrorMessage = "Valor deve estar entre {1} e {2}")]
            //[RegularExpression(@"^$|^\d+.?\d{0,2}$", ErrorMessage = "Valor de hora extra inválido")]
            [Display(Name = "Valor hora extra")]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:C0}")]
            public decimal? ValorHoraExtra { get; set; }
    
            [ScaffoldColumn(false)]
            public DateTime? DataCadastro { get; set; }
    
            [DataType(DataType.Date)]
            [Display(Name = "Ínicio do contrato")]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
            public DateTime? DataInicio { get; set; }
    
            [DataType(DataType.Date)]
            [Display(Name = "Fim do contrato")]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
            public DateTime? DataFim { get; set; }
    
            [MaxLength(50, ErrorMessage ="Tamanho máximo de {0} caracteres")]
            [Display(Name = "Detalhes do contrato")]
            public string Descricao { get; set; }
    
            [ScaffoldColumn(false)]
            public bool Ativo { get; set; }
    
            [DataType(DataType.Currency)]
            [Range(0, 100, ErrorMessage = "Valor deve estar entre {0} e {1}")]
            //[RegularExpression(@"^$|^\d+.?\d{0,2}$", ErrorMessage = "Valor de hora inválido")]
            [Display(Name = "Valor hora")]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:C0}")]
            public decimal? ValorHora { get; set; }
    
            //[RegularExpression("^([01]?[0-9]|2[0-3]):[0-5][0-9]$", ErrorMessage = "Horário de entrada inválido")]
            [DataType(DataType.Time)]
            [Display(Name ="Horário de entrada")]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:HH:mm}")]
            public TimeSpan? HorarioEntrada { get; set; }
    
            //[RegularExpression("^([01]?[0-9]|2[0-3]):[0-5][0-9]$", ErrorMessage = "Horário de saída inválido")]
            [DataType(DataType.Time)]
            [Display(Name = "Horário de saída")]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:HH:mm}")]
            public TimeSpan? HorarioSaida { get; set; }
    
            //[RegularExpression("^$|^([01]?[0-9]|2[0-3]):[0-5][0-9]$", ErrorMessage = "Horário início do intervalo inválido")]
            [DataType(DataType.Time)]
            [Display(Name = "Horário de início do intervalo")]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:HH:mm}")]
            public TimeSpan? IntervaloInicio { get; set; }
    
            //[RegularExpression("^$|^([01]?[0-9]|2[0-3]):[0-5][0-9]$", ErrorMessage = "Horário final do intervalo inválida")]
            [DataType(DataType.Time)]
            [Display(Name = "Horário final do intervalo")]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:HH:mm}")]
            public TimeSpan? IntervaloFim { get; set; }
    
            [Display(Name = "Validar local de apontamento de horas")]
            public bool ValidarLocalizacao { get; set; }
            public virtual ICollection<AlocacaoViewModel> Alocacaos { get; set; }
            public virtual ClienteViewModel Cliente { get; set; }
    
            public SelectList ListaClientesAtivos { get; set; }
        }


    View

    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
    
        <div class="form-horizontal">
            <h4>Edição de Contrato</h4>
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(model => model.ClienteID, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.DropDownList("ClienteID", Model.ListaClientesAtivos, new { @class = "control-label col-md-2", @disabled = "disabled" })
                    @Html.ValidationMessageFor(model => model.ClienteID, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.NumeroReferencia, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.NumeroReferencia, new { htmlAttributes = new { @maxlength = "20", @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.NumeroReferencia, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.ModalidadeContrato, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.DropDownList("ModalidadeContrato", new List<SelectListItem> {
                        new SelectListItem{ Text="Alocação", Value = "A", Selected = true },
                        new SelectListItem{ Text="Projeto", Value = "P" }
                     },
                     htmlAttributes: new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.ModalidadeContrato, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.ModalidadeApuracao, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.DropDownList("ModalidadeApuracao", new List<SelectListItem> {
                        new SelectListItem{ Text="Hora Aberta", Value = "A", Selected = true },
                        new SelectListItem{ Text="Hora Fechada", Value = "F" }
                     },
                     htmlAttributes: new { @class = "form-control", @onchange = "habilitarHorasMes();" })
                    @Html.ValidationMessageFor(model => model.ModalidadeApuracao, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div id="divHorasMes" class="form-group" style="display: none">
                @Html.LabelFor(model => model.QtdHorasMes, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.QtdHorasMes, new { htmlAttributes = new { @maxlength = "3", @class = "form-control", @type = "number" } })
                    @Html.ValidationMessageFor(model => model.QtdHorasMes, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div id="divApuracaoHoraExtra" class="form-group">
                @Html.LabelFor(model => model.ApuracaoHoraExtra, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    <div class="checkbox">
                        @Html.CheckBoxFor(model => model.ApuracaoHoraExtra, htmlAttributes: new { @onchange = "habilitarHoraExtra();" })
                    </div>
                </div>
            </div>
    
            <div id="divHorasExtras" class="form-group" style="display: none">
                @Html.LabelFor(model => model.ValorHoraExtra, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.ValorHoraExtra, new { htmlAttributes = new { @maxlength = "5", @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.ValorHoraExtra, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.DataInicio, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.DataInicio, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.DataInicio, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.DataFim, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.DataFim, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.DataFim, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.Descricao, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Descricao, new { htmlAttributes = new { @maxlength = "50", @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.Descricao, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.ValorHora, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.ValorHora, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.ValorHora, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.HorarioEntrada, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.HorarioEntrada, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.HorarioEntrada, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.HorarioSaida, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.HorarioSaida, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.HorarioSaida, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.IntervaloInicio, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.IntervaloInicio, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.IntervaloInicio, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.IntervaloFim, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.IntervaloFim, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.IntervaloFim, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.ValidarLocalizacao, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.CheckBoxFor(model => model.ValidarLocalizacao, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.ValidarLocalizacao, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Salvar" class="btn btn-default" />
                </div>
            </div>
        </div>
    }
    
    <div>
        @Html.ActionLink("Voltar", "Index")
    </div>
    
    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
        @Scripts.Render("~/bundles/mask")
    
        <script type="text/javascript">
            function habilitarHoraExtra() {
                if ($("#ApuracaoHoraExtra").is(':checked'))
                    $("#divHorasExtras").show();
                else
                    $("#divHorasExtras").hide();
            }
    
            function habilitarHorasMes() {
                if ($("#ModalidadeApuracao").val() == "A") {
                    $("#divHorasMes").hide();
                    $("#divApuracaoHoraExtra").show();
                }
                else {
                    $("#divHorasMes").show();
                    $("#divApuracaoHoraExtra").hide();
                }
            }
    
            jQuery(function ($) {
                $("#QtdHorasMes").mask("999");
                //$("#ValorHora").mask("999,99", { reverse: true });
                //$("#ValorHoraExtra").mask("999,99", { reverse: true, greedy: false });
                //$("#DataInicio").mask("99/99/9999", { placeholder: "dd/mm/yyyy" });
                //$("#DataFim").mask("99/99/9999", { placeholder: "dd/mm/yyyy" });
                //$("#HorarioEntrada").mask("99:99", { placeholder: "hh:mm" });
                //$("#HorarioSaida").mask("99:99", { placeholder: "hh:mm" });
                //$("#IntervaloInicio").mask("99:99", { placeholder: "hh:mm" });
                //$("#IntervaloFim").mask("99:99", { placeholder: "hh:mm" });
            });
    
        </script>

    O que há de errado?

    Obrigado

    sexta-feira, 15 de julho de 2016 12:38

Todas as Respostas

  • Ola,

    Consegui encontrar o erro.

    Quando informado o tipo do campo por Data Annotation, não há necessidade de fazer validações com outras instruções como RegularExpression ou DisplayFormat.

    Essa combinação de de atributos no meu código que estava gerando erro.

    No entanto um problema ainda continua.

    Não estou conseguindo visualizar as datas gravadas no banco de dados para estas propriedades da minha model:

    [DataType(DataType.Date)]
    [Display(Name = "Ínicio do contrato")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime? DataInicio { get; set; }
    
    [DataType(DataType.Date)]
    [Display(Name = "Fim do contrato")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime? DataFim { get; set; }

    Estas propriedades não estão vazias, mas não aparecem ao carregar os dados na View de edição.


    Otavio

    sexta-feira, 15 de julho de 2016 17:55