how can I validate a data model with mvc

1

Am I processing my save information through AJAX, sending parameters in a JSON string that I later get in the controller, how can I send error messages in the fields of the view that are wrong?

$('#btnGuardar').click(function () {

            var ValorLongitudNombreCorto;
            var ValorLongitudNombreLicitacion;
            var NombreConfiguracion = $('#txtNombreConfiguracion').val();
            var NombreLicitacion = $('#txtNombreLicitacion').val();
            var PresentacionNombre = $('input:radio[name=PresentacionNombre]:checked').val();
            var LongitudNombre = $('input:radio[name=LongitudNombre]:checked').val();
            var CaracteresSeparacionPresentador = $('#DDLCarcteresSeparacionPresentador option:selected').text();
            var CaracteresSeparacionCarga = $('#DDLCarcteresSeparacionCarga option:selected').text();
            var ColorUnoCoinciden = $('#txtColorUnoCoinciden').val();
            var ColorDosFaltaCapturar = $('#txtColorDosFaltaCapturar').val();
            var ColorTresNoCoinciden = $('#txtColorTresNoCoinciden').val();
            var ColorPrimerLugar = $('#txtColorPrimerLugar').val();
            var ColorSegundoLugar = $('#txtColorSegundoLugar').val();
            var ColorTercerLugar = $('#txtColorTercerLugar').val();
            var ValorFormula = $('#DDLFormulas').val();
            var TipoFuente = $('#DDLTipoFuente option:selected').text();
            var TamanoFuente = $('#DDLTamanoFuente option:selected').text();
            var ValorPaginacion = $('#txtPaginacion').val();

            if (LongitudNombre == 'C') {
                ValorLongitudNombreCorto = true;
            } else {
                ValorLongitudNombreCorto = false;
            }

            if (PresentacionNombre == 'Licitacion') {
                ValorLongitudNombreLicitacion = true;
            } else {
                ValorLongitudNombreLicitacion = false;
            }

            var url = "http://localhost:6892/Validador/GuardarConfiguracion";
            var data = new FormData();


            var data = {
                items: {
                    NombreConfiguracion: NombreConfiguracion
                    , NombreLicitacion: NombreLicitacion
                    , PresentacionLicitacionn: ValorLongitudNombreLicitacion
                    , NombresCortos: ValorLongitudNombreCorto
                    , CaracteresSeparacionPresentador: CaracteresSeparacionPresentador
                    , CaracteresSeparacionCarga: CaracteresSeparacionCarga
                    , ColorPropuestasCoinciden: ColorUnoCoinciden
                    , ColorPropuestasFaltaCapturar: ColorDosFaltaCapturar
                    , ColorPropuestasNoCoinciden: ColorTresNoCoinciden
                    , ColorPublicoPrimerLugar: ColorPrimerLugar
                    , ColorPublicoSegundoLugar: ColorSegundoLugar
                    , ColorPublicoTercerLugar: ColorTercerLugar
                    , IdFormula: ValorFormula
                    , TipoFuente: TipoFuente
                    , TamanoFuente: TamanoFuente
                    , ValorPaginacion: ValorPaginacion
                }
            };

            $.ajax({
                type: "Post",
                url: url,
                datatype: "json",
                contentType: 'application/json;charset=utf-8',
                processData: false,
                data: JSON.stringify(data),
                success: function (data) {
                    if (data.Success === true) {

                        alert("Se guardo la configuración exitosamente!");
                        window.location.href = '/Validador/ConfigurarSistema'
                        $('.ModalGuardadoConfiguracion').click();
                    }
                    else {
                        alert("Intentelo nuevamente!");
                        //$('.ModalNoGuardadoConfiguracion').click();
                    }
                    //    alert(data.mensaje);
                },
                error: function (xhr, status, errorthrow) {
                    //alert(xhr.error);
                    //alert("error en proceso");
                }
            });


        });
<div class="container">
    <!---->
    <div class="row">
        <div class="text-left col-md-9">
            <div class="container">
                &nbsp;
            </div>
        </div>
        <div class="text-left col-md-3" style="padding-top:10px">
            <div class="text-right">
                <button id="btnGuardar" type="button" class="btn btn-primary">Guardar</button>
            </div>
        </div>
    </div>
    <!---->
    <p></p>
    <div class="panel panel-default sinMargin">
        <div class="panel-body">
            <div class="text-left col-md-12">
                <label class="col-sm-12 control-label" for="email-03">Configuraciones:</label>
                @Html.DropDownList("DDLConfiguraciones", ViewBag.MuestraConfiguraciones as SelectList, new { @class = "form-control", id = "DDLConfiguraciones" })
            </div>
        </div>
    </div>
    <div class="panel panel-default sinMargin">
        <div class="panel-body">
            <div class="text-left col-md-6">
                <label class="col-sm-12 control-label" for="email-03">Nombre de la Configuración:</label>
                @Html.TextBox("txtNombreConfiguracion", null, new { @class = "form-control", placeholder = "DEFAULT" })
            </div>
            <div class="text-left col-md-6">
                <label class="col-sm-12 control-label" for="email-03">Nombre de la Licitación:</label>
                @Html.TextBox("txtNombreLicitacion", null, new { @class = "form-control", placeholder = "" })
            </div>
            <div class="text-left col-md-9">
                <div class="container">
                    &nbsp;
                </div>
            </div>

            <div class="text-left col-md-12">
                <label class="col-sm-12 control-label" for="email-03" style="font-weight: normal;">Presentación de Nombre:</label>
                <div class="col-md-6">
                    <label> @Html.RadioButton("PresentacionNombre", "Configuracion") <span><strong>Nombre Configuración</strong></span></label>
                    
                </div>

                <div class="col-sm-6">
                    <label> @Html.RadioButton("PresentacionNombre", "Licitacion", new { @checked = "checked" }) <span><strong>Nombre Licitación</strong></span></label>
                </div>
            </div>

        </div>
    </div>
    <!---->
    <div class="panel panel-default sinMargin">
        <div class="panel-body">

            <div class="text-left col-md-6">
                <label class="col-sm-12 control-label" for="email-03">Presentación de Licitantes:</label>
                <br />
            </div>
            <div class="text-left col-md-6">
                <label class="col-sm-12 control-label" for="email-03">Caracteres de Separación:</label>
                <br />
            </div>
            <hr />
            <div class="text-left col-md-6">
                <label class="col-sm-12 control-label" for="email-03" style="font-weight: normal;">Presentación de Nombres:</label>
                <div class="text-left col-md-6">
                    <label class="col-sm-12 control-label" for="email-03"></label>

                    <label> @Html.RadioButton("LongitudNombre", "C", new { @checked = "checked" }) <span><strong>Nombres Cortos</strong></span></label>
                    <br />
                </div>
                <div class="text-left col-md-6">
                    <label class="col-sm-12 control-label" for="email-03"></label>
                    <div class="col-sm-12">

                        <label> @Html.RadioButton("LongitudNombre", "L") <span><strong>Nombres Largos</strong></span></label>
                    </div>
                    <br />
                </div>

            </div>

            <div class="text-left col-md-3">
                <label class="col-sm-12 control-label" for="email-03" style="font-weight: normal;">Presentador:</label>

                @Html.DropDownList("DDLCarcteresSeparacionPresentador", ViewBag.MuestraCaracteresPresentador as SelectList, new { @class = "form-control col-md-12" })

                <br />
            </div>

            <div class="text-left col-md-3">
                <label class="col-sm-12 control-label" for="email-03" style="font-weight: normal;">Carga:</label>

                @Html.DropDownList("DDLCarcteresSeparacionCarga", ViewBag.MuestraCaracteresCarga as SelectList, new { @class = "form-control col-md-12" })

                <br />
            </div>
        </div>
    </div>
    <!---->
    <!---->
    <div class="panel panel-default sinMargin">
        <div class="panel-body">

            <div class="text-left col-md-12">
                <label class="col-sm-12 control-label" for="email-03">Colores:</label>
                <br />
            </div>
            <hr />
            <div class="row">
                <div class="text-left col-md-12">
                    <label class="col-sm-12 control-label" for="email-03" style="font-weight: normal;">Validar propuestas:</label>
                    <div class="text-left col-md-4">
                        <label class="col-sm-12 control-label" for="email-03"></label>

                        <label>Coinciden valores</label>
                        @Html.TextBox("txtColorUnoCoinciden", null, new { @class = "form-control" })
                        <br />
                    </div>
                    <div class="text-left col-md-4">
                        <label class="col-sm-12 control-label" for="email-03"></label>

                        <label>Falta capturar una propuesta</label>
                        @Html.TextBox("txtColorDosFaltaCapturar", null, new { @class = "form-control" })
                        <br />
                    </div>
                    <div class="text-left col-md-4">
                        <label class="col-sm-12 control-label" for="email-03"></label>

                        <label>No coinciden valores</label>
                        @Html.TextBox("txtColorTresNoCoinciden", null, new { @class = "form-control" })
                        <br />
                    </div>
                </div>
            </div>
            <hr />
            <div class="row">
                <div class="text-left col-md-12">
                    <label class="col-sm-12 control-label" for="email-03" style="font-weight: normal;">Pantallas al público:</label>
                    <div class="text-left col-md-4">
                        <label class="col-sm-12 control-label" for="email-03"></label>

                        <label>Primer lugar</label>
                        @Html.TextBox("txtColorPrimerLugar", null, new { @class = "form-control" })
                        <br />
                    </div>
                    <div class="text-left col-md-4">
                        <label class="col-sm-12 control-label" for="email-03"></label>

                        <label>Segundo lugar</label>
                        @Html.TextBox("txtColorSegundoLugar", null, new { @class = "form-control" })
                        <br />
                    </div>
                    <div class="text-left col-md-4">
                        <label class="col-sm-12 control-label" for="email-03"></label>

                        <label>Tercer lugar</label>
                        @Html.TextBox("txtColorTercerLugar", null, new { @class = "form-control" })
                        <br />
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!---->
    <!---->
    <div class="panel panel-default sinMargin">
        <div class="panel-body">

            <div class="text-left col-md-10">
                <label class="col-sm-12 control-label" for="email-03">Formula:</label>
                @Html.DropDownList("DDLFormulas", ViewBag.MuestraFormulas as SelectList, new { @class = "form-control", id = "DDLFormulas" })
            </div>

            <!--<div class="row">  -->
            <div class="text-center col-md-2">
                <label class="col-sm-12 control-label" for="email-03">&nbsp;</label>
                @Html.ActionLink("Crear Formula", "AgregarFormula", "Validador", new { @class = "btn btn-success btn-sm" })
            </div>
            <!--</div> -->
        </div>
    </div>
    <!---->
    <!---->
    <div class="panel panel-default sinMargin">
        <div class="panel-body">

            <div class="text-left col-md-12">
                <label class="col-sm-12 control-label" for="email-03">Letra y paginación:</label>
                <br />
            </div>

            <div class="row">
                <div class="text-center col-md-12">

                    <div id="test">
                        Ejemplo de texto
                    </div>
                    <p></p>
                    <hr />
                </div>
            </div>


            <div class="text-left col-md-4">
                <label class="col-sm-12 control-label" for="email-03">Tipo de fuente:</label>
                @Html.DropDownList("DDLTipoFuente", ViewBag.TiposFuente as SelectList, new { @class = "form-control col-md-11", id = "DDLTipoFuente", name = "DDLTipoFuente" })
                @*Html.DropDownListFor(x => x.TiposLetra, (SelectList)ViewBag.TiposFuente)*@

                <br />
            </div>

            <div class="text-center col-md-4">
                <label class="col-sm-12 control-label" for="email-03">Tamaño de fuente:</label>
                <div class="col-md-4 text-center">
                    &nbsp;
                </div>
                <div class="col-md-4 text-center">
                    @Html.DropDownList("DDLTamanoFuente", ViewBag.TamaniosFuente as SelectList, new { @class = "form-control col-md-11", id = "DDLTamanoFuente", name = "DDLTamanoFuente" })
                </div>

                <br />
            </div>
            <div class="text-center col-md-4">
                <label class="col-sm-12 control-label" for="email-03">Paginación:</label>
                <div class="col-md-4 text-center">
                    &nbsp;
                </div>
                <div class="col-md-4 text-center">

                    @Html.TextBox("txtPaginacion", null, new { @class = "form-control" })

                </div>

                <br />
            </div>
        </div>
    </div>

    <div class="row col-md-6 col-md-offset-3 text-center">
        <table>
            <tr>
                <td style="color:white">.</td>
            </tr>
        </table>
    </div>

</div>

Controller Method

public ActionResult GuardarConfiguracion(entConfiguracion items)
    {

        /*Guadar formulario en tabla ConfigurarSistema*/
        //int? FormulaSeleccionada,
        string NombreConfiguracion = items.NombreConfiguracion;
        string NombreLicitacion = items.NombreLicitacion;
        bool ValorLongitudNombreLicitacion = Convert.ToBoolean(items.PresentacionLicitacionn);
        bool ValorLongitudNombreCorto = Convert.ToBoolean(items.NombresCortos);
        string CaracteresSeparacionPresentador = items.CaracteresSeparacionPresentador;
        string CaracteresSeparacionCarga = items.CaracteresSeparacionCarga;
        string ColorUnoCoinciden = items.ColorPropuestasCoinciden;
        string ColorDosFaltaCapturar = items.ColorPropuestasFaltaCapturar;
        string ColorTresNoCoinciden = items.ColorPropuestasNoCoinciden;
        string ColorPrimerLugar = items.ColorPublicoPrimerLugar;
        string ColorSegundoLugar = items.ColorPublicoSegundoLugar;
        string ColorTercerLugar = items.ColorPublicoTercerLugar;
        int ValorFormula = items.IdFormula;
        string TipoFuente = items.TipoFuente;
        int TamanioFuente = items.TamanoFuente;
        int ValorPaginacion = items.ValorPaginacion;


        bool success = false;
        if (ModelState.IsValid)
        {
            try
            {

                SqlParameter[] prmsConfiguracion = new SqlParameter[18];

                prmsConfiguracion[0] = new SqlParameter("@NombreConfiguracion", SqlDbType.VarChar);
                prmsConfiguracion[0].Value = NombreConfiguracion;

                prmsConfiguracion[1] = new SqlParameter("@NombreLicitacion", SqlDbType.VarChar);
                prmsConfiguracion[1].Value = NombreLicitacion;

                prmsConfiguracion[2] = new SqlParameter("@PresentacionNombreLicitacion", SqlDbType.Bit);
                prmsConfiguracion[2].Value = ValorLongitudNombreLicitacion;

                prmsConfiguracion[3] = new SqlParameter("@PresentacionNombresCortos", SqlDbType.Bit);
                prmsConfiguracion[3].Value = ValorLongitudNombreCorto;

                prmsConfiguracion[4] = new SqlParameter("@CaracteresSeparacionPresentador", SqlDbType.VarChar);
                prmsConfiguracion[4].Value = CaracteresSeparacionPresentador;

                prmsConfiguracion[5] = new SqlParameter("@CaracteresSeparacionCarga", SqlDbType.VarChar);
                prmsConfiguracion[5].Value = CaracteresSeparacionCarga;

                prmsConfiguracion[6] = new SqlParameter("@ColorValidarPropuestasCoinciden", SqlDbType.VarChar);
                prmsConfiguracion[6].Value = ColorUnoCoinciden;

                prmsConfiguracion[7] = new SqlParameter("@ColorValidarPropuestasFaltaCapturar", SqlDbType.VarChar);
                prmsConfiguracion[7].Value = ColorDosFaltaCapturar;

                prmsConfiguracion[8] = new SqlParameter("@ColorValidarPropuestasNoCoinciden", SqlDbType.VarChar);
                prmsConfiguracion[8].Value = ColorTresNoCoinciden;

                prmsConfiguracion[9] = new SqlParameter("@ColorPantallaPublicoLugar1", SqlDbType.VarChar);
                prmsConfiguracion[9].Value = ColorPrimerLugar;

                prmsConfiguracion[10] = new SqlParameter("@ColorPantallaPublicoLugar2", SqlDbType.VarChar);
                prmsConfiguracion[10].Value = ColorSegundoLugar;

                prmsConfiguracion[11] = new SqlParameter("@ColorPantallaPublicoLugar3", SqlDbType.VarChar);
                prmsConfiguracion[11].Value = ColorTercerLugar;

                prmsConfiguracion[12] = new SqlParameter("@IdFormula", SqlDbType.Int);
                prmsConfiguracion[12].Value = ValorFormula;

                prmsConfiguracion[13] = new SqlParameter("@TipoFuente", SqlDbType.VarChar);
                prmsConfiguracion[13].Value = TipoFuente;

                prmsConfiguracion[14] = new SqlParameter("@TamanoFuente", SqlDbType.Int);
                prmsConfiguracion[14].Value = TamanioFuente;

                prmsConfiguracion[15] = new SqlParameter("@ValorPaginacion", SqlDbType.Int);
                prmsConfiguracion[15].Value = ValorPaginacion;

                prmsConfiguracion[16] = new SqlParameter("@Activo", SqlDbType.Bit);
                prmsConfiguracion[16].Value = 1;

                prmsConfiguracion[17] = new SqlParameter("@Predeterminado", SqlDbType.Bit);
                prmsConfiguracion[17].Value = 1;

                object resultadoFormula = DB.EjecutarEscalar("SP_GuardarConfiguracion", prmsConfiguracion);

                success = true;
                return Json(new { Success = success, Mensaje = "OK" });
            }
            catch (Exception ex)
            {
                return Json(new { Success = success, Mensaje = "hubo un error" });
            }
            //return Json(new { Ok = true });
        }

        return Json(new { Success = success, Mensaje = "hubo un error" });


        /*Guadar formulario en tabla ConfigurarSistema*/
    }

Model

public class entConfiguracion
{


    /*Propiedades Configuración*/
    public int IdConfiguracion { get; set; }
    [Required]
    public string NombreConfiguracion { get; set; }
    public string NombreLicitacion { get; set; }
    public bool PresentacionLicitacionn { get; set; }
    public bool NombresCortos { get; set; }
    public string CaracteresSeparacionPresentador { get; set; }
    public string CaracteresSeparacionCarga { get; set; }
    [Required]
    public string ColorPropuestasCoinciden { get; set; }
    [Required]
    public string ColorPropuestasFaltaCapturar { get; set; }
    [Required]
    public string ColorPropuestasNoCoinciden { get; set; }
    [Required]
    public string ColorPublicoPrimerLugar { get; set; }
    [Required]
    public string ColorPublicoSegundoLugar { get; set; }
    [Required]
    public string ColorPublicoTercerLugar { get; set; }
    public int IdFormula { get; set; }
    public string TipoFuente { get; set; }
    public int TamanoFuente { get; set; }
    public int ValorPaginacion { get; set; }


}
    
asked by Ivxn 12.04.2018 в 01:28
source

1 answer

3

I recommend using a number to distinguish if there was an error or if everything went well Ej: 0 if there is an error and 1 If everything went well.

I hope it helps you

On the controller

if (ModelState.IsValid)
{
    try
    {
      // Tu código aquí
    }
    catch (Exception ex)
    {
       return Json(new { Code = 0, Error = ex.Message" });
    }
}
else
{
   return Json(new { Code = 0, Error = ModelState.Values.SelectMany(x => x.Errors).FirstOrDefault().ErrorMessage });
}

In the view (success)

success: function (response) {
   if (response.Code == 1) { // Todo salio bien
      alert("Se guardo la configuración exitosamente!");
      window.location.href = '/Validador/ConfigurarSistema'
      $('.ModalGuardadoConfiguracion').click();
   } 
   else if (response.Code == 0) { // Hubo un error
      alert(response.Error);
   }
}

I recommend using validations from the model

public class entConfiguracion
{
    public int IdConfiguracion { get; set; }
    [StringLength(100, ErrorMessage = "El limite es de 100 caracteres maximos")]
    [Required(ErrorMessage = "Este campo es requerido")] // Requerido
    public string NombreConfiguracion { get; set; }
    public string NombreLicitacion { get; set; }
}

Help links

Using Data Annotations for Model Validation

Data Annotations Attributes in EF 6 and EF Core

    
answered by 12.04.2018 / 04:42
source