Sólo estoy mirando en la conversión de Formularios web con MVC:

En .net MVC, lo que los conceptos de hacer ViewState algo eso no es necesario?

Si un formulario es enviado de vuelta en iteself etc (es decir, una devolución de datos)? ¿cómo funciona la página/usercontrol de mantener su estado?

Qué trucos son personas que están haciendo para mantener algún tipo de estado y no recurrir al estado de la sesión?

Sin duda, un completo entorno sin estado no puede existir?

  • Soy consciente de la web es apátrida y me refiero a la comparación con asp.net webforms…
InformationsquelleAutor Mark Redman | 2010-02-09

13 Comentarios

  1. 79

    Pero por supuesto que se puede. De hecho, la web es apátridas. Todos los pensamientos en el sentido contrario a la aberración, de hecho.

    Controles Web que se han ido en MVC. No hay eventos de disparo en el lado del servidor. Este es sustituido por dos mecanismos diferentes–y las Url de la Publicación de los datos del formulario. El uso adecuado de estos reemplazará la necesidad de que el ViewState.

    Que en una convencional ASP.NET aplicación web, se podría colocar un LinkButton en su página web que iba a realizar la función de X. ASP.NET pegaría un montón de ViewState resto, javascript y otras cosas en la página web de manera que, cuando el usuario hace clic en el botón y «vuelve» a la web (mediante la presentación de un formulario que nadie sabe que existe), ASP.NET reconstruye lo sucedido y determina un determinado controlador de eventos de botón debe ser ejecutado.

    En MVC, construir el enlace para acceder a una ruta en particular. La ruta se describe lo que el usuario desea hacer–/Usuarios/Mora/Índice (mostrar una lista de todos los delincuentes de los usuarios). El sistema de enrutamiento en MVC determina el tipo de control que se encargará de esto la ruta y el método en el controlador que se va a ejecutar. Cualquier información adicional puede ser transmitida al controlador método de consulta de URL de la cadena de valores (?Page=5 para las 5 de la página de los delincuentes).

    Además de la Url, puede utilizar los formularios HTML para PUBLICAR información más compleja (como un formulario de datos), o cosas que no caben en una cadena de consulta, tales como un archivo.

    Por lo que «mantener» el estado a través de las cadenas de consulta y la forma de POST de valores. Usted encontrará que, en realidad, no hay mucho de estado a mantener en la final. De hecho, tener que mantener un montón de estado, es una buena indicación de que el diseño es deficiente o que usted está tratando de hacer algo que no se ajusta a un modelo de sitio web.

    • Muy de acuerdo – de que no sólo es necesario, y, de hecho, mucho más fácil sin él.
    • Al menos el estado de su sitio web tiene el más fácil es el código y probar y mantener. El problema es que el estado es una gran muleta puede ser difícil deshacerse de él a la primera.
    • +1 para los apátridas capa de la vista como el buen diseño. Apátridas vistas son muy incomprendidos.
    • Estado mirando MCV por alrededor de un mes y ahora todo su sentido. Esto no significa volver a la aplicación de un par de cosas, pero en el largo plazo, la eficiencia de la guarda es inmensa. Gracias por las respuestas..
    • bien, esta respuesta no es 100% exacto, viewstate/mantener el estado no tiene que hacer nada con asp.net «webforms» eventos.. haga clic con el botón por ejemplo, devolución funcionará sin viewstate, usted puede elegir el uso de viewstate y/o desactivar selectivamente y todavía hacen uso de controles, evento impulsado por la modelo y otras cosas buenas asp.net webforms traer. De hecho, incluso el mantenimiento del estado de la vía «web forms» implementar a menudo es útil especialmente en el complejo de administración de pantallas/páginas. MVC no es una bala de plata 😉
    • «mantenimiento del estado de la vía «web forms» implementa » es lo que la gente hizo antes de WebForms y es lo que la gente hace después de Formularios web con MVC. es decir, ida y vuelta campos ocultos de formulario.
    • Así que si todo el mundo es el uso de «campos de formulario ocultos», ¿por qué no una que se llama «ViewState»?
    • No estoy seguro de lo que quieres decir con «¿por qué no uno llamado Viewstate’. Usted puede llamar a un campo de formulario oculto lo que quieras.

  2. 12

    Algunas preguntas relacionadas:


    En la mayoría de los tradicionales lenguajes de la web, el concepto de estado de medio ambiente es realmente muy raro. ASP.NET Webforms es una excepción a la regla y que se crea que la excepción por la reinvención de una gran cantidad de normas. El objetivo detrás de Webforms es esencialmente abstracto el concepto de HTML y desarrollo web en general, de manera que la línea entre la aplicación de escritorio y aplicaciones web desdibuja desde un punto de vista de desarrollo. Lo que esto generalmente se tiende a decir es que la solución que ASP.NET Webforms proporciona, aunque eficaz, es un gato-de-todo-negocia la aplicación que se traduce en una muy detallado de salida que funciona lo suficientemente bien como para satisfacer a la mayoría. Por el contrario, la principal ventaja de ASP.NET MVC es que se da el HTML de salida de control para el desarrollador y le permite crear fuertemente de arquitectura, Tranquilo aplicaciones web que están mejor definidos y limpios en su aplicación y presentación – a pesar de sacrificar un cierto nivel de comodidad.

    Posiblemente, uno de los mayores inconvenientes de los Formularios modelo es el ViewState porque se satura la salida, aumenta el tamaño de la página dramáticamente en ciertos escenarios, y a menudo es el equivalente a usar un martillo neumático para colgar un cuadro. En lugar de tratar de hacer uso de ViewState en su aplicación MVC (o algo parecido), usted debe comenzar a utilizar patrones que de manera explícita el control de los campos en los formularios y optimizar la entrada y salida de las operaciones con sólo los datos más relevantes. Además de los cambios en el marcado, también aprenderás a construir mejores soluciones de diseño que pueden estar expuestos en su solicitud y externamente.

    El número uno de la comparación que me gusta hacer es simplemente: Webforms construye Páginas Web, pero MVC construye Aplicaciones Web. Si en su día-a-día de trabajo es principalmente de piezas de construcción de un sitio web, o la adición de pequeños fragmentos de funcionalidad, usted encontrará a menudo Webforms a ser mucho más fácil y menos tiempo; por otro lado, si usted quiere construir una aplicación completa que es comprobable, escalable y flexible, MVC es su llamado.

  3. 9

    viewstate es simplemente un grande, fea campo de formulario oculto.

    Escribir tu propia campos ocultos de formulario, y cifrar ellos si es necesario.

    Afortunadamente, ya no hay manera simple volcado de los lotes y lotes de datos en la página, así que usted tiene que ser prudente acerca de lo que usted desea guardar.

  4. 4

    Si un formulario es enviado de vuelta sobre sí mismo, etc
    (es decir, una devolución de datos)? ¿cómo funciona el
    página/usercontrol de mantener su estado? Qué trucos son personas que están haciendo para mantener algún tipo de estado y no recurrir al estado de la sesión?

    El publicado ViewData (o con establecimiento inflexible de tipos de objeto enlazado a la página) puede ser empujado fuera de la vista de nuevo. Consulte «Integración de la Validación y la Lógica de Regla de Negocio con el Modelo de Clases» en esta página. Se muestra cómo usted puede enviar un formulario, validación, y el retorno a los campos en el formulario si se produce un error.

    En .net MVC, lo que los conceptos de hacer
    ViewState algo de eso no
    se requiere?

    La Transferencia de Estado representacional (REST).

  5. 3

    MVC tiene algunas ventajas sobre WebForms, pero también tiene algunas desventajas, como he cubierto detalle en esta respuesta. Creo que la pregunta fundamental que hay que preguntarse es si ViewState es un problema para usted ahora – y es un problema que debe volver a escribir la aplicación? Si no, entonces el Aprendizaje MVC es un objetivo que vale la pena (lo que realmente mola bastante), pero no uno que había riesgo de negocio para.

    Con lo que se dice, ViewState en realidad puede ser deshabilitado en un número sorprendentemente grande de casos. Se utiliza principalmente para conservar el valor de los controles a través de un post-back. Así, por ejemplo, si usted tiene un cuadro de texto cuyo valor debe comprobar en el lado del servidor, así como un montón de otros campos, ViewState te permitirá manejar el post de nuevo, detectar el error (y mostrar una etiqueta) y, a continuación, devolver al usuario el formulario con todos sus datos intactos. Sin embargo, si un formulario es sólo va a ser llenado y enviado de vuelta y entonces se le redirigir a otra página, puede desactivarlo.

    Por último, te pido lo que la gente está haciendo para evitar el estado de la Sesión. Hay una razón para evitar el estado de la sesión? Seguramente usted no quiere que cantidad de información, pero evitando por completo no es realmente necesario y, de hecho, va a costar uno de las herramientas más poderosas en el arsenal.

  6. 3

    Todas las respuestas diciendo que ASP.NET MVC no utilizar el estado son bastante correctos. Pero ASP.NET MVC no en el hecho de utilizar algunas de estado, a pesar de que no funciona nada de ViewState.

    Generalmente, cuando alguien envía los datos a la aplicación, usted va a querer para validar los datos y mostrar un mensaje de error si los datos no son válidos. Sin embargo, si usted acaba de devolver a la página que contiene el mensaje de error inmediatamente, cuando el usuario pulsa la tecla F5 para recargar la página, los datos serán reenviados. Esto no suele ser lo que usted desea. Así, cuando te das cuenta de que los datos Publicados no son válidos, no quiere decirle a los usuarios para CONSEGUIR que la página (o quizás otra página) y mostrar un mensaje de error. Hacer que mediante la devolución de una Redirección HTTP de código de estado. Sin embargo, una vez que el usuario OBTENGA petición llega, ¿cómo saber qué mensaje de error a la pantalla? Usted tendrá que de alguna manera recuerda esto desde el momento en que (el servidor) son el manejo de la POST hasta que el manejo de la GET.

    Para ello utilice un ASP.NET MVC característica llamada TempData. Esto es en realidad sólo una envoltura alrededor de Sesión, que se asegura de que cualquier cosa que meter en la TempData diccionario permanecerá allí hasta la siguiente solicitud y no más.

    • +1 old post carente de «religión». Es fácil para nosotros los técnicos suscribirse a algunas de uber modelo – hasta que, por supuesto llega a la usuario. Me encantaría ver una «aplicación sin estado» que, dicen, será caminar a través de su declaración de impuestos. Más sencillo – ¿y sólo va a través de la personalización de un producto + proceso de compra y lo que la navegación existe en el medio.
  7. 2

    Considerar el hecho de que el RESTO del movimiento en programación de páginas web se basa en la idea de que el estado es mal para un programa. La Wikipedia tiene un decente descripción de referencias: http://en.wikipedia.org/wiki/Representational_State_Transfer

    Procedentes de tranditional ASP.NET y los ricos modelo de eventos que proporciona, MVC puede ser bastante discordante. Es hace requieren la gestión de algunas de las cosas que eran invisibles para usted antes, pero creo que el valor en términos de capacidad de prueba (el RESTO de las páginas puede ser activado fácilmente sin la creación de un complejo de viewstate y, por definición, el servidor no está conteniendo estado para que yo pueda probar una página/característica de aislamiento) desplazamientos de la curva de aprendizaje.

    Alguna discusión de MVC en ASP.NET y el RESTO: http://blog.wekeroad.com/2007/12/06/aspnet-mvc-using-restful-architecture/

  8. 0

    El estado es el modelo que está en la base de datos. Con cuidado puede caché de la base de datos para reducir los tiempos de carga de página.

  9. 0

    Generado automáticamente el estado de vista no existen en MVC, pero usted puede escribir su propio simplemente el uso de campos ocultos,

    En MVC usted no va a ver un montón de caracteres cifrados en la parte superior de la página que usted no necesita más de ellos.

  10. 0

    Realmente lo hace. Usted tiene que olvidarse de la forma en que la persistencia se hizo con el viewstate.

    Usted también tiene que convertir en tu mente devolución de datos en una página para «llamar a un controlador». De esta manera, las cosas serán más fáciles de entender después. En lugar de llamar a una página , usted está llamando a un controlador que devuelve una vista. Así que ya sea su está construyendo su conjunto «página» una y otra vez en cada llamada, o si usted decide tratar sólo con lo que realmente está afectado por la acción. Si el botón está cambiando de un div, ¿por qué volver a cargar toda la página. Acaba de hacer usted llame a su controlador y devolver lo que deben ser los nuevos datos en su div.

    por ejemplo imaginemos un escenario principal/detalle:

    <h2>Groups</h2>
        <div id="GroupList">
        </div>
        <div id="GroupDetail" title="Detail Group">
    </div>

    La lista de grupo se carga una vez en el div y no
    es una llamada ajax a un controlador para cada elemento de la lista de grupo :

    <%= Ajax.ActionLink("Edit", "DetailLocalisationGroup", 
                         new { id = group.Id }, 
                         new AjaxOptions() { 
                             UpdateTargetId = "DetailLocalisationGroup", 
                             OnSuccess = "InitialisationDetailGroup" })%>

    que llama a esta acción DetailLocalisationGroup que es para alimentar el div GroupDetail con html.

    [AcceptVerbs("POST")]
    public ActionResult DetailLocalisationGroup(int id)
    {
        LocalisationGroup group = servicelocalisation.GetLocalisationGroup(id);
        return View("DetailGroup", group);
    }

    Ahora hay un formulario en el div, y al pulsar el botón enviar de esta forma, acabamos de enviarle la información que realmente necesita un controlador que luego guardar los datos en la base de datos.

    Durante todos estos acontecimientos, la GroupList estaba llena de cosas que se muestran en la pantalla del cliente, pero no de la interacción que se necesitaba allí y entonces, ¿por qué molestan a sí mismo con una viewstate para estos…

    • Hola, ok soy de ir a través de algunos tutoriales y creo entender lo que estás diciendo… sin embargo no entiendo cómo por ejemplo, usted puede hacer una lista de las cosas sin tener una Plantilla de diseño de diseño en la interfaz de usuario, usted no tiene que codificar algún tipo de Plantilla Html en el Controlador? Que no parezca una separación de preocupación?
    • ..o me estoy perdiendo algo…
    • Esperamos que no sea demasiado tarde… Bueno, usted no necesita una plantilla Html en el controlador. La única cosa que usted necesita, es decir que su utilización, y para dar a este punto de vista el objeto, que necesita. Funciona de la misma manera como un Control de Usuario.
  11. 0

    Puede imitar el estado de vista con MVC3Futures proyecto. Va a salvar a todo el modelo en la vista.

    Todo lo que tienes que hacer es serializar modelo y cifrar la vista.

    @Html.Serialize("Transfer", Model, SerializationMode.EncryptedAndSigned)

    Y en el controlador de añadir deserializa atributo.

    public ActionResult Transfer(string id,[Deserialize(SerializationMode.EncryptedAndSigned)]Transfer transfer)
  12. 0

    Después de leer todos estos posts, suena como el MVC no es bueno para LOB tipo de aplicaciones, donde usted tendrá muchos de los controles y operaciones CRUD y desea mantener el estado de los controles. Hay un montón de razones donde desea que el usuario permanezca en el mismo punto de vista & mantener el estado después de presentar las operaciones se realiza. Por ejemplo, para mostrar los errores, de lado de servidor de validación de mensajes, mensajes de éxito, o para realizar cualquier otra acción. redirigir usuario a algún otro punto de vista para mostrar estos mensajes no es práctico.

  13. 0

    Puede almacenar cualquier objeto en el estado de la sesión.

     HttpContext.Session["userType"] = CurrentUser.GetUserType();

Dejar respuesta

Please enter your comment!
Please enter your name here