none
mvc funcion en c# comun varias vistas RRS feed

  • Pregunta

  • hola foro :

    Como podría hacer para realizar una funcion para varias vistas razor . La idea es poner codigo comun una funcion.

    la funcion por adentro una comparacion y devuelve un valor  booleando , como esta ahora tengo varios if en el razor.

    mi idea es  las vista Razor donde se haga la comparacion tendria una llamada asi a la funcion  IsValido() 


    Cual podria ser la mejor manera de resolverlo y donde ponerla  hacer una @functions{}o hay que hacer un shared.cshtml?


    Gracias 

    domingo, 7 de agosto de 2016 22:43

Respuestas

  • Hola Inovador2015,

    Una manera es crear la función en una clase normal, y esta que guarde el resultado en un Viewbag, así solo tendrías que obtener el valor y validar en la vista.

    Un ejemplo :

          public ActionResult Index(int id)
            {
                ViewBag.isValido = isValido();
                return View();
            }
    
            public bool isValido()
            {
                //Código
            }

    Y en la vista, haces la validación :

       @if (ViewBag.isValido != null)
        {
            bool result = (bool)ViewBag.isValido;
            <div class="@(result ? "success" : "error")"></div>
        }

    Si el resultado es true agrega el success, si es falso agrega el error.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    domingo, 7 de agosto de 2016 22:59
  • hola

    Pero que validas en esa funcion ? es algo del modelo? porque si es asi deberias ubicar esa funcion en la clase no en razor

    >>mi idea es  las vista Razor donde se haga la comparacion tendria una llamada asi a la funcion  IsValido()

    En razor no deberias validar nada, no se aplica ninguna logica en la view

    no se programan validaciones o reglas de negocio en la view, podrias poner algo simple que decida si mostrar un estilo u otro, o algun campo a nivel visual, pero solo llega hasta ahi la logica que deberias poner en la view

    >>Cual podria ser la mejor manera de resolverlo y donde ponerla  hacer una @functions{}o hay que hacer un shared.cshtml?

    no llego a comprender que tipo de validacion quieres implementar, por eso no sabria dodne deberias ubicarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Inovador2015 martes, 9 de agosto de 2016 1:34
    lunes, 8 de agosto de 2016 3:58

Todas las respuestas

  • Hola Inovador2015,

    Una manera es crear la función en una clase normal, y esta que guarde el resultado en un Viewbag, así solo tendrías que obtener el valor y validar en la vista.

    Un ejemplo :

          public ActionResult Index(int id)
            {
                ViewBag.isValido = isValido();
                return View();
            }
    
            public bool isValido()
            {
                //Código
            }

    Y en la vista, haces la validación :

       @if (ViewBag.isValido != null)
        {
            bool result = (bool)ViewBag.isValido;
            <div class="@(result ? "success" : "error")"></div>
        }

    Si el resultado es true agrega el success, si es falso agrega el error.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    domingo, 7 de agosto de 2016 22:59
  • Gracias por responder JC NaupaCrispín  muy buena idea  y muy prolijo.  lo que se me ocurre llevar la funcion a otra capa para rehusar en varios controllers.

    lunes, 8 de agosto de 2016 1:04
  • hola

    Pero que validas en esa funcion ? es algo del modelo? porque si es asi deberias ubicar esa funcion en la clase no en razor

    >>mi idea es  las vista Razor donde se haga la comparacion tendria una llamada asi a la funcion  IsValido()

    En razor no deberias validar nada, no se aplica ninguna logica en la view

    no se programan validaciones o reglas de negocio en la view, podrias poner algo simple que decida si mostrar un estilo u otro, o algun campo a nivel visual, pero solo llega hasta ahi la logica que deberias poner en la view

    >>Cual podria ser la mejor manera de resolverlo y donde ponerla  hacer una @functions{}o hay que hacer un shared.cshtml?

    no llego a comprender que tipo de validacion quieres implementar, por eso no sabria dodne deberias ubicarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Inovador2015 martes, 9 de agosto de 2016 1:34
    lunes, 8 de agosto de 2016 3:58