Pergunta

Como muitos outros neste site, estou considerando mudar para ASP.NET MVC para projetos futuros.Atualmente meus sites estão executando os Web Forms tradicionais do ASP.NET 2.0, e funciona bem para nós, então minha outra opção é continuar com o que sei e migrar para o ASP.NET 3.5 com o material AJAX integrado.

Estou me perguntando como os controles de usuário funcionam no ASP.NET MVC.Temos toneladas de .ASCX controles e alguns controles compostos.Quando trabalho com web designers é muito fácil fazê-los usar os controles ASCX de forma eficaz, mesmo sem qualquer conhecimento de programação, então isso é definitivamente uma vantagem.Mas é claro que as desvantagens são o ciclo de vida da página, que pode ser enlouquecedor, e o fato de que os controles ASCX são difíceis de compartilhar entre diferentes projetos.Os controles compostos podem ser compartilhados, mas basicamente são uma caixa preta para um designer.

Qual é o modelo no ASP.NET MVC?Existe uma maneira de criar controles que resolvam os problemas com os quais lidamos usando ASCX e controles compostos?Permitir acesso fácil para web designers sem a necessidade de se preocupar com a quebra do código é uma consideração importante.

Foi útil?

Solução

Para implementar um controle de usuário você faz a seguinte chamada:

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

Você também pode ver a sintaxe mais antiga que a partir do PR5 não é mais válida

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

Você sempre terá que se preocupar com a quebra de código ao migrar do Web Forms para o MVC, porém a equipe do ASP.NET MVC fez um ótimo trabalho para minimizar os problemas.

Outras dicas

Como Nick sugeriu, você realmente será capaz de renderizar seus controles de usuário, mas obviamente o ciclo de página, o estado de página e o postback dos formulários Web ASP tradicionais não funcionarão mais, tornando seus controles provavelmente inúteis.

Acho que você terá que reescrever a maioria dos seus controles complexos para portar seu site para MVC, enquanto controles simples que, por exemplo, fornecem apenas formatação e não têm status de postback, devem simplesmente funcionar.O código fornecido por Nick simplesmente funcionará neste caso.

E sobre o compartilhamento entre mais projetos:Acho que os controles serão mais como "componentes reutilizáveis ​​de renderização de HTML" que podem ser compartilhados em um site, em vez de "componentes de código reutilizáveis" com lógica (como controles WebForms).Sua lógica da web estará/deverá estar nos controladores de páginas e não nos controles HTML.Portanto, compartilhar controles entre mais projetos não será tão útil como no caso dos WebForms.

MVC tem ciclo de vida de página diferente em comparação ao seu controle de usuário.

Você pode considerar isso para reescrever.

O aspx é o visualizar.Você ainda precisa reescrever, a sintaxe é diferente.JavaScript funcionará.Mas dificilmente acho que os WebControls funcionem.Porque o MVC não tem mais viewstate e postback.

Para o código por trás (aspx.cs), você precisa convertê-lo em um Controlador aula.Page_Load método não funcionará mais.Você provavelmente deixa isso para Index() método.

Modelo são simplesmente as classes de entidade que seu código consome.

Conclusão, é uma reescrita total.Saúde.Boa codificação.

Sim, você pode fazer RenderPartial.Esse é um bom começo.Mas eventualmente esses caras precisarão de lógica e outras coisas do tipo controlador.Esteja atento a uma implementação de subcontrolador da equipe de estrutura.Também deve haver algo no MvcContrib em breve.Ou faça o seu próprio.

Editar: Acabei de postar sobre isso aqui: http://mhinze.com/subcontrollers-in-aspnet-mvc/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top