none
Dar Formato a un Campo Fecha en MVC Razor RRS feed

  • Pregunta

  • Hola Buenas

    Espero que me puedan ayudar con un problema que no le encuentro una solucion, estoy desarrollando una aplicacion donde tengo problemas en un campo fecha, las cosas que voy utilizando es el siguiente MVC, Code First, Razor, datepicker, vs2015.

    La implementacion del modelo es el siguiente:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.Web;
    
    namespace SolarOneVentas.Models
    {
        public class Compra
        {
            public int CompraID { get; set; }
            public string NumeroTicket { get; set; }
            [Required]
            [DataType(DataType.MultilineText)]
            public string Descripcion { get; set; }
            public double Monto { get; set; }
            [Required]        
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
            [DataType(DataType.Date)]
            public DateTime? FechaCompra { get; set; }
            public DateTime FechaAlta { get; set; }        
            public int ProveedorID { get; set; }
            public virtual Proveedor Proveedor { get; set; }
        }
    }

    La vista es la siguiente:

    @model SolarOneVentas.Models.Compra
    
    @{
        ViewBag.Title = "Create";
    }
    
    <h2>Create</h2>
    
    
    @using (Html.BeginForm()) 
    {
        @Html.AntiForgeryToken()
        
        <div class="form-horizontal">
            <h4>Compra</h4>
            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(model => model.NumeroTicket, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.NumeroTicket, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.NumeroTicket, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.Descripcion, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Descripcion, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.Descripcion, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.Monto, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Monto, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.Monto, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.FechaCompra, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @*@Html.EditorFor(model => model.FechaCompra, new { htmlAttributes = new { @class = "form-control" } })*@
                    @Html.EditorFor(model => model.FechaCompra, new { htmlAttributes = new { @class = "form-control", @PlaceHolder = "Enter Fecha de Compra" } })
                    @Html.ValidationMessageFor(model => model.FechaCompra, "", new { @class = "text-danger" })
                    
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.FechaAlta, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.FechaAlta, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.FechaAlta, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.ProveedorID, "ProveedorID", htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.DropDownList("ProveedorID", null, htmlAttributes: new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.ProveedorID, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
        </div>
    }
    
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
    
    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }

    La implementacion del datepicker :

    //if (!Modernizer.inputtypes.date) {
        $(function () {
            $('#FechaCompra').datepicker({ format: 'dd/mm/yyyy' }).val();
        });
    //}

    El problema es el siguiente cuando intento registrar un registro en el campo FechaCompra me da el siguiente problema:

    Resulta que el Campo FechaCompra necesito insertar de la siguiente manera dd/mm/yyyy, y es eso que hace el datepicker() pero cuando inserto me da el error, el campo al pararecer solo acepta mm/dd/yyyy, solo asi me deja pasar, ya intente muchas cosas pero no encuentro donde puede estar el problema, espero que me puedan ayudar muchas gracias.
    • Editado tuxGentoo miércoles, 19 de octubre de 2016 23:22 errores
    miércoles, 19 de octubre de 2016 23:19

Todas las respuestas

  • Hola tuxGentoo,

    Si estás utilizando un datepicker() para obtener la fecha, deberías asigarn el input como readonly (solo lectura) así evitarías que el usuario pueda escribir y solo seleccionaría la fecha.

    Si estás haciendo un Create porque usas un EditFor ? Sería mejor que uses un :

    @Html.TextBoxFor(model => model.FechaCompra, "{0:dd/MM/yyyy}", new { @class = "form-control", @readonly = true })

    Por cierto, creo que no es necesario agregar el .val() al datepicker();

    $('#FechaCompra').datepicker({
        format: "dd/mm/yyyy",
        language: "es",
    });

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 19 de octubre de 2016 23:57
  • Gracias amigo por tu pronta respuesta, pues el motivo de utilizar EditFor() es por que el vs lo creo automaticamente con esos valores, la verdad no se mucho de esta area de programacion de ASP solo use el "Controlador de MVC5 con vistas que usa Entity Framework", hice la prueba y me sigue saliendo el mismo problema.

    [Required]        
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
            [DataType(DataType.Date)]
            public DateTime FechaCompra { get; set; }

    <div class="form-group">
                @Html.LabelFor(model => model.FechaCompra, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @*@Html.EditorFor(model => model.FechaCompra, new { htmlAttributes = new { @class = "form-control" } })*@
                    @*@Html.EditorFor(model => model.FechaCompra, new { htmlAttributes = new { @class = "form-control", @PlaceHolder = "Enter Fecha de Compra" } })*@
                    @Html.TextBoxFor(model => model.FechaCompra, "{0:dd/MM/yyyy}", new { @class = "form-control", @readonly = true })
                    @*@Html.EditorFor(model => model.FechaCompra, new { htmlAttributes = new { @class = "form-control", @Value = Model.FechaCompra.ToString("YYYY-MM-DD") } })*@
                    @Html.ValidationMessageFor(model => model.FechaCompra, "", new { @class = "text-danger" })
                    
                </div>
            </div>

    $('#FechaCompra').datepicker({
        format: "dd/mm/yyyy",
        language: "es",
    });

    jueves, 20 de octubre de 2016 0:16
  • Hola tuxGentoo,

    Lo he probado y me funciona correctamente.

    Puedes echarle un ojo a este hilo donde se plantea una pregunta similar, analiza las respuestas propuestas.

    Dar formato a campo fecha en MVC

    Dónde tienes que verificar en tu web.config que tengas :

    Además de agregar la Cultura correspondiente. En mis caso es Perú :

       <globalization uiCulture="es-PE" culture="es-PE"/>
      </system.web>

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 20 de octubre de 2016 2:17
  • Hola amigo Joel te cuento que hice la pruba con la informacion que me proporcionaste y nada no logro pasar el problema.
    viernes, 21 de octubre de 2016 3:05