tag route que paginas pages net mvc for aspnet asp asp.net-mvc user-controls

route - ¿Cuál es la mejor manera de implementar controles de usuario en ASP.NET MVC?



select asp-for asp-items (4)

Como 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.

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.


Como sugirió Nick, de hecho podrá renderizar 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 el formato y no tienen estado de devolución de datos, simplemente deberían funcionar. El código provisto por Nick simplemente funcionará en este caso.

Y sobre 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ódigos 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.


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

Puede considerar esto para volver a escribir.

El aspx es la 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 subyacente (aspx.cs) necesita convertir eso para ser una clase de Controlador . Page_Load método Page_Load ya no funcionará. Probablemente lo dejes en el método Index() .

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

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


Para implementar un control de usuario, realice la siguiente llamada:

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

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

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

Siempre tendrá que preocuparse por la alteración del 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.


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: Acabo de publicar sobre esto aquí: http://mhinze.com/subcontrollers-in-aspnet-mvc/