2008-09-03 12 views
11

Al igual que muchos otros en este sitio, estoy considerando mudarme a ASP.NET MVC para proyectos futuros. Actualmente, mis sitios están ejecutando los formularios web ASP.NET 2.0 tradicionales, y funcionan bien para nosotros, por lo que mi otra opción es simplemente mantener lo que sé y pasar a ASP.NET 3.5 con las funciones integradas de AJAX.¿Cuál es la mejor manera de implementar controles de usuario en ASP.NET MVC?

Me pregunto cómo funcionan los controles de usuario en ASP.NET MVC. Tenemos toneladas de controles .ASCX y algunos controles compuestos. Cuando trabajo con diseñadores web, es muy fácil lograr que utilicen controles ASCX de manera efectiva, incluso sin ningún conocimiento de programación, por lo que es un punto a favor. Pero, por supuesto, las desventajas son el ciclo de vida de la página, que puede ser enloquecedor, y el hecho de que los controles ASCX son difíciles de compartir entre diferentes proyectos. Los controles compuestos son compartibles, pero básicamente son una caja negra para un diseñador.

¿Cuál es el modelo en ASP.NET MVC? ¿Hay alguna manera de crear controles que resuelvan los problemas que hemos tratado utilizando ASCX y controles compuestos? Permitir un acceso fácil para los diseñadores web sin tener que preocuparse de que se rompa el código es una consideración importante.

Respuesta

8

Para implementar un control de usuario que hace la llamada siguiente:

<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %> 

También puede ver la sintaxis más antigua que a partir de PR5 ya no es válida

<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %> 

siempre tendrá que preocuparse sobre el cambio de código al pasar de Web Forms a MVC; sin embargo, el equipo ASP.NET MVC ha hecho un gran trabajo para minimizar los problemas.

1

Como sugirió Nick, de hecho podrá representar sus controles de usuario, pero obviamente el ciclo de página, el estado de página y la devolución de datos de los formularios web ASP tradicionales ya no funcionarán, lo que hace que sus controles sean probablemente inútiles.

Creo que tendrá que volver a escribir la mayoría de los controles complejos para trasladar su sitio web a MVC, mientras que los controles simples que, por ejemplo, proporcionan solo formato y no tienen estado de devolución, deberían funcionar. El código proporcionado por Nick simplemente funcionará en este caso.

Y compartir entre más proyectos: creo que los controles serán más como "componentes de renderización de HTML reutilizables" que se pueden compartir en un sitio web, en lugar de "componentes de código reutilizables" con lógica (como controles de WebForms). Su lógica web debe/debe estar en los controladores de páginas y no en los controles HTML. Por lo tanto, compartir controles en más proyectos no será tan útil como en el caso de WebForms.

1

Sí, puedes hacer RenderPartial. Ese es un buen comienzo. Pero eventualmente estos tipos necesitarán lógica y otras cosas del tipo de controlador. Esté atento a la implementación de un subcontrolador del equipo del marco. También debería haber algo en MvcContrib pronto. O rueda el tuyo.

Editar: Me acaba de publicar sobre esto aquí: http://mhinze.com/subcontrollers-in-aspnet-mvc/

+2

Esto tiene un enlace muerto. – chrish

1

MVC tiene diferente ciclo de vida de la página en comparación con el control de usuario.

Puede tener esto en cuenta para volver a escribir.

El aspx es el vista. Aún necesita una nueva escritura, la sintaxis es diferente. JavaScript funcionará. Pero apenas encuentro que los WebControls funcionarán.Debido a que MVC ya no tiene viewstate y postback.

Para el código detrás (aspx.cs) necesita convertir eso para ser un controlador clase. Page_Load método ya no funcionará. Es probable que lo dejes al método Index().

El modelo es simplemente las clases de entidad que consume su código detrás.

Conclusión, es una reescritura total. Aclamaciones. Feliz codificación.

Cuestiones relacionadas