none
Problema con validación RRS feed

  • Pregunta

  • Hola.

    estoy desarrollando un módulo de cobranza, donde el usuario puede pagar en efectivo o cheque.

    El problema que tengo es que si el usuario quiere pagar solo en efectivo y no usa cheques, no completa los datos correspondientes a este, por lo tanto me da error de validación en la fecha, importe, numero de cheque, etc. 

    Esta es mi clase:

     public class Cobranza
        {
            [Key]
            public int CobranzaID { get; set; }
            [DisplayFormat(DataFormatString = "{0:dd/MM/yy}", ApplyFormatInEditMode = true)]
            public DateTime Fecha { get; set; }
            public Cliente Cliente { get; set; }
            public int ClienteID { get; set; }
            [NotMapped]
            public List<DocumentoEmpresaCobroViewModel> DocumentosAPagar { get; set; }
            public List<Documento> Documentos { get; set; }
            public Nullable<int> ChequeTerceroID { get; set; }
            public ChequeTercero ChequeTercero { get; set; }
            [DataType(DataType.Currency)]
            public double Efectivo { get; set; }
    }

    y el cliente:

     <fieldset>
           <legend>Efectivo</legend>
            <div class="editor-label">
               Importe:
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Efectivo)
                @Html.ValidationMessageFor(model => model.Efectivo)
            </div>
            </fieldset>
            <fieldset><legend>Cheque</legend>
           <input type="checkbox" name="PagoConCheque" />
               <div class="editor-label">
            @Html.LabelFor(model => model.ChequeTercero.Fecha) 
            </div>
             <div class="editor-field">
            @Html.EditorFor(model => model.ChequeTercero.Fecha)
                @Html.ValidationMessageFor(model => model.ChequeTercero.Fecha)
            
            </div>
             <div class="editor-label">
             @Html.LabelFor(model => model.ChequeTercero.FechaCobro) 
            </div>
             <div class="editor-field">
            @Html.EditorFor(model => model.ChequeTercero.FechaCobro)
                @Html.ValidationMessageFor(model => model.ChequeTercero.FechaCobro)
            </div>
            <div class="editor-label">
            @Html.LabelFor(model => model.ChequeTercero.Banco) 
            </div>
             <div class="editor-field">
            @Html.EditorFor(model => model.ChequeTercero.Banco)
                @Html.ValidationMessageFor(model => model.ChequeTercero.Banco)
            </div>
             <div class="editor-label">
            @Html.LabelFor(model => model.ChequeTercero.Numero) 
            </div>
             <div class="editor-field">
            @Html.EditorFor(model => model.ChequeTercero.Numero)
                @Html.ValidationMessageFor(model => model.ChequeTercero.Numero)
            </div>
             <div class="editor-label">
            @Html.LabelFor(model => model.ChequeTercero.Importe) 
            </div>
             <div class="editor-field">
            @Html.EditorFor(model => model.ChequeTercero.Importe)
                @Html.ValidationMessageFor(model => model.ChequeTercero.Importe)
            </div>
             
             
             
            </fieldset>

    Cual es la mejor forma de salvar este problema?

    Muchas gracias desde ya.

    lunes, 5 de marzo de 2012 12:51

Respuestas

  • Buenas!

    Los tipos por valor (tal como DateTime) requieren que haya un valor entrado si o si. Para que el valor pueda ser opcional declara el valor como Nullable (Nullable<DateTime> o DateTime?).

    Lo mismo aplicaria al resto de campos que son por valor.

    IMHO yo replantearía la vista que te pide los campos. Atar las vistas a las entidades que usas en BBDD (sospecho que Cobranza es una entidad) es una mala idea en muchos casos. Yo incluiria clases especificas para capturar los datos de la vista. Incluso, podrían ser dos acciones distintas del controlador las que gestionasen una nueva "cobranza" en efectivo o en cheque. Cada acción recibiría su ViewModel (sus datos propios) y construiría la entidad Cobranaza de forma correcta.

    A nivel de UX eso podría ser una primera selección de si vas a usar cheque o efectivo y mostra/ocultar/cargar via ajax la parte de formulario correspondiente.

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:47
    jueves, 8 de marzo de 2012 8:07