none
Estado de las paginas RRS feed

  • Pregunta

  • A nivel practico, como se reemplaza en MVC el uso de la VIEWSTATE?.

    Por ejemplo, tengo dos combos anidados, selecciono en el primero y luego en base a este tengo que cargar el segundo combo, como mantengo el estado del primer combo luego de llenar el segundo?

    Despues, respecto al estado de sesion en memoria en el servidor Web (modo InProc), como se comporta MVC respecto a esto?.

    Salu2.

    miércoles, 3 de agosto de 2011 16:59

Respuestas

  • Hola:

     

    Siento decirte que en el buen sentido de la palabra discrepamos un poco :)

     

    1. Yo puedo hacer cargas parciales sin tener que recargar toda la pagina, aunque como tu apuntas recargando se puede hacer. Pero estarás de acuerdo conmigo que puedes utilizar jquery para realizar la carga del segundo combo cuando cambie el primero. No siempre un controlador tiene que devolver una vista. Tambien puede devolver JsonResult, de hecho como sabes los controladores devuelve normalmente ActionResult y tanto ViewResult como JsonResult heredan de este.

     

    Mira este link:

     

    http://geekswithblogs.net/ranganh/archive/2011/06/14/cascading-dropdownlist-in-asp.net-mvc-3-using-jquery.aspx

     

     

    2. En el post de Eduard apunta que efectivamente los unit testing fallan pero propone una solución y que a mi parecer es correcta. 

     

    Al ejecutar este UnitTest… patapaaaam! Nos va a lanzar una NullReferenceException, porque como no estamos ejecutando los tests bajo el motor de ASP.NET no existe Session ni nada parecido (por lo que el método Index de HomeController se encuentra un null cuando accede a la propiedadSession). ¿Y entonces? Pues debemos, de alguna manera u otra conseguir crear Mocks de dichos objetos.

    Hay varias maneras de hacer esto, pero una de las más sencillas es usar elTestHelper de MvcContrib. Veamos como podemos testear este método usando MvcContrib. Para ello nos descargamos MvcContrib (para la versión de ASP.NET MVC que estés usando) y:

    1. Agregamos una referencia a MvcContrib.TestHelper.dll
    2. Agregamos otra referencia a Rhino.Mocks.dll. Nota: Técnicamente esta referencia no es necesaria que la agreguemos en nuestro proyecto. El requisito a cumplir es que Rhino.Mocks.dll esté disponible en tiempo de ejecución del test (MvcContrib.TestHelper.dll depende de ella). P. ej. otra forma de conseguir esto es agregar Rhino.Mocls.dll a la solución y usar [DeploymentItem].

     

     

    Otra alternativa es que utilices  Ninject. No te asustes por el color :). Te paso un link para que veas como se utiliza 

    http://stackoverflow.com/questions/6306783/mvc3-how-to-correctly-inject-dependencies-with-mvc3-and-ninject

     

    Saludos.


    phurtado
    • Marcado como respuesta Eder Costa martes, 16 de octubre de 2012 13:04
    miércoles, 3 de agosto de 2011 18:45

Todas las respuestas

  • Hola:

    A nivel practico, como se reemplaza en MVC el uso de la VIEWSTATE?.

     

    Te paso un link por si quieres implementar un ViewState en MVC

    http://geeks.ms/blogs/jmaguilar/archive/2010/09/22/191-un-viewstate-en-asp-net-mvc.aspx

     

    De todas formas yo no te recomiendo, que lo utilices, Cuando he tenido que hacer eso lo he realizado a través de Jquery llamando a través de $.Ajax  http://api.jquery.com/jQuery.ajax/. Lo que hago es llamar a un controlador que me devuelve Json.

     

    Despues, respecto al estado de sesion en memoria en el servidor Web (modo InProc), como se comporta MVC respecto a esto?.

     

    Mira este link

     

    http://geeks.ms/blogs/etomas/archive/2010/06/30/asp-net-mvc-q-amp-a-c-243-mo-usar-la-sesi-243-n.aspx

     

    De todas formas y me imagino que lo sabes :) no abuses de sesion.

     

    Saludos,

     



    phurtado
    miércoles, 3 de agosto de 2011 17:36
  • Hola:

    A nivel practico, como se reemplaza en MVC el uso de la VIEWSTATE?.

     

    Te paso un link por si quieres implementar un ViewState en MVC

    http://geeks.ms/blogs/jmaguilar/archive/2010/09/22/191-un-viewstate-en-asp-net-mvc.aspx

     

    De todas formas yo no te recomiendo, que lo utilices, Cuando he tenido que hacer eso lo he realizado a través de Jquery llamando a través de $.Ajax  http://api.jquery.com/jQuery.ajax/. Lo que hago es llamar a un controlador que me devuelve Json.

     

    Despues, respecto al estado de sesion en memoria en el servidor Web (modo InProc), como se comporta MVC respecto a esto?.

     

    Mira este link

     

    http://geeks.ms/blogs/etomas/archive/2010/06/30/asp-net-mvc-q-amp-a-c-243-mo-usar-la-sesi-243-n.aspx

     

    De todas formas y me imagino que lo sabes :) no abuses de sesion.

     

    Saludos,

     



    phurtado


    Gracias x tu respuesta.

    Para que quede claro: para mantener el estado hay que volver a cargar los datos, en el ejemplo, si quiero mantener el estado de un combo el controlador debe tomar su valor y devolverselo a la vista.

    En la segunda pregunta, segun el link indicado, en estado del lado servidor sigue igual que para WebForm (uso de Session, etc. pero trae problemas para los unit testing)...

    Salu2.

    miércoles, 3 de agosto de 2011 17:49
  • Hola:

     

    Siento decirte que en el buen sentido de la palabra discrepamos un poco :)

     

    1. Yo puedo hacer cargas parciales sin tener que recargar toda la pagina, aunque como tu apuntas recargando se puede hacer. Pero estarás de acuerdo conmigo que puedes utilizar jquery para realizar la carga del segundo combo cuando cambie el primero. No siempre un controlador tiene que devolver una vista. Tambien puede devolver JsonResult, de hecho como sabes los controladores devuelve normalmente ActionResult y tanto ViewResult como JsonResult heredan de este.

     

    Mira este link:

     

    http://geekswithblogs.net/ranganh/archive/2011/06/14/cascading-dropdownlist-in-asp.net-mvc-3-using-jquery.aspx

     

     

    2. En el post de Eduard apunta que efectivamente los unit testing fallan pero propone una solución y que a mi parecer es correcta. 

     

    Al ejecutar este UnitTest… patapaaaam! Nos va a lanzar una NullReferenceException, porque como no estamos ejecutando los tests bajo el motor de ASP.NET no existe Session ni nada parecido (por lo que el método Index de HomeController se encuentra un null cuando accede a la propiedadSession). ¿Y entonces? Pues debemos, de alguna manera u otra conseguir crear Mocks de dichos objetos.

    Hay varias maneras de hacer esto, pero una de las más sencillas es usar elTestHelper de MvcContrib. Veamos como podemos testear este método usando MvcContrib. Para ello nos descargamos MvcContrib (para la versión de ASP.NET MVC que estés usando) y:

    1. Agregamos una referencia a MvcContrib.TestHelper.dll
    2. Agregamos otra referencia a Rhino.Mocks.dll. Nota: Técnicamente esta referencia no es necesaria que la agreguemos en nuestro proyecto. El requisito a cumplir es que Rhino.Mocks.dll esté disponible en tiempo de ejecución del test (MvcContrib.TestHelper.dll depende de ella). P. ej. otra forma de conseguir esto es agregar Rhino.Mocls.dll a la solución y usar [DeploymentItem].

     

     

    Otra alternativa es que utilices  Ninject. No te asustes por el color :). Te paso un link para que veas como se utiliza 

    http://stackoverflow.com/questions/6306783/mvc3-how-to-correctly-inject-dependencies-with-mvc3-and-ninject

     

    Saludos.


    phurtado
    • Marcado como respuesta Eder Costa martes, 16 de octubre de 2012 13:04
    miércoles, 3 de agosto de 2011 18:45