Como posso aceder a um controle do lado do servidor em um código por trás no meu projeto MVC?

StackOverflow https://stackoverflow.com/questions/1014987

Pergunta

Em primeiro lugar, deixe-me dizer que eu sei que acessam os controles do lado do servidor na minha opinião é desaprovada no MVC. No entanto, eu preciso na minha situação (tanto quanto eu posso ver). Aqui é a minha história. :)

Eu tenho um controle 3o partido que eu estou usando no meu aplicativo web. Eu tenho atualmente dada a tarefa de porta de nossa solução de WebForms ao MVC. Este controle de terceiros web particular requer a arquitetura WebForms, então eu estou olhando apenas para usar o mesmo código de meus WebForms do projeto.

abordagem inicial era ter dois sites (um local WebForms e um site MVC) e, em seguida, ligando as duas usando iFrames do lado do MVC. Enquanto eu sei que iria trabalhar, foi um pouco de um exagero apenas para usar este controle particular. Depois de fazer mais pesquisas, eu descoberto que eu posso "misturar os meninos" e usar o WEBFORMS arquitetura dentro de um projeto MVC. Portanto, a nova abordagem que eu tomei é única copiar as páginas que utilizam esta 3ª controle do partido em um diretório específico (ie. 'Ver \ somedir \ WebForms') e, em seguida, ignorar esse diretório no meu arquivo global para que o sistema de roteamento MVC não pegá-lo:

routes.IgnoreRoute("View\SomeDir\WebForms\{*pathInfo}");

Infelizmente, quando eu copiei sobre a página ASPX ao meu projeto MVC, eu descobri que o CodeBehind não me conceda acesso a meu controle na página. Aqui é como as coisas são criadas:

<%@ Register 
  Assembly="..." 
  Namespace="..." 
  TagPrefix="custom" %>

<custom:SomeControl ID="customControl" runat="server" />

Aqui está o meu código por trás parece com:

public class MyPage : Page
{
  protected void Page_Load(object sender, EventArgs args)
  {
     Debug.WriteLine(customControl.ID); // <-- COMPILE ERROR: Cannot resolve symbol 'customControl'
  }
}

Infelizmente meu projeto não vai mesmo compilar porque eu recebo este erro em cada controle no meu CodeBehind. Não é um problema para converter os outros controles (ie. Rótulos, painéis, caixas de texto, etc ..) para as tags do cliente, mas eu preciso ter acesso a esse controle personalizado no meu código por trás para que eu possa ouvi-la de (do lado do servidor ) eventos e responder em conformidade; WebForms básicos coisas ...

É o que eu estou tentando fazer mesmo possível? Outra abordagem que eu pensava que o trabalho might é inicializar e prender os eventos do lado do servidor na classe do controlador. No entanto, eu gostaria de evitar a serialização o estado do controle no modo de exibição, simplesmente passá-lo para o controlador e volta, se possível?

Agradecemos antecipadamente por qualquer conselho!

Foi útil?

Solução

Caramba !! Eu encontrei a solução 10 minutos depois que eu postei isso.

A correção foi o botão direito sobre o meu projeto e dizer "Convert to Web Application" e mudar minha classe de volta CodeBehind a um 'parcial'. Todos os meus controles estão agora acessíveis através da trás código.

Obrigado pela leitura e espero que a minha pergunta / resposta vai ajudar alguém um dia. :)

Outras dicas

Não vejo o ponto em portar algo para MVC apenas para manter a metade dela WebForms tradicionais.

Esta abordagem implica quaisquer futuros desenvolvedores precisará estar familiarizado com ambas as tecnologias e não é limpo na minha opinião.

Eu iria com um ou o outro e tentar evitar a mistura dos dois.

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