Definir a ação de um formulário no .net 3.5 SP1 causa erros quando compilado
Pergunta
Instalei recentemente o .net 3.5 SP1.Quando implantei um site compilado que continha um formulário com seu conjunto de ações:
<form id="theForm" runat="server" action="post.aspx">
Recebi este erro.
Método não encontrado:'Void System.Web.UI.HtmlControls.HtmlForm.set_Action(System.String)'.
Se um colega desenvolvedor que não instalou o SP1 implantar o site compilado, ele funcionará bem.Alguém sabe de alguma solução para isso?
Solução
.NET 3.5 SP1 tenta usar o atributo action="" (.NET 3.5 RTM não).Portanto, quando você implanta, seu código está tentando definir a propriedade HtmlForm.Action e falhando, pois System.Web.dll no destino de implantação é RTM e não possui um setter na propriedade.
Outras dicas
Não conheço a solução específica, mas HtmlForm.set_Action() é uma função criada pelo compilador que atua como setter para uma propriedade chamada Action.
Quando você faz:
public String Action { set { DoStuff(); } }
O definir o código na verdade se torna uma função chamada set_Action.
Sei que não é a melhor resposta, mas espero que ajude você a encontrar a origem dos seus problemas!
Acabei de encontrar o mesmo problema.Pelo que entendi, isso é realmente causado pelo fato de meu PC ter o .NET 3.5 SP1 e o servidor no qual implantei o projeto não.
Pelo que entendi, uma solução é que o servidor seja atualizado com .NET 3.5 SP1.Como não quero fazer isso ainda, apenas removi o atributo “action” de todos os formulários do projeto e isso resolveu o problema.
Consulte Mais informação
Poderia usar o método aqui para definir o método form.action:
Tudo o que foi dito acima é verdade...
Na verdade, quando alguém instala o 3.5 SP1, ele atualiza automaticamente o 2.0 e o 3.0 com seu próprio SP2.Portanto, se você estiver usando 2.0 para um aplicativo, receberá o erro.
Além disso, o SP1 no .Net2.0 não causou o problema.
Existe outra solução para isso.Escreva um javascript que defina a ação do formulário para o URL esperado em Page_Load e registre o script no carregamento da página.
Basta instalar o framework 3.5 SP1 que funciona.