Pergunta

******************** Editar 2 ********************** Eu descobri o problema ... Mas eu não gosto das implicações. Eu estava testando o nosso iPhone alvo aplicação móvel mais cedo e usando um plugin para mascarar Agent String Usuário do Firefox como um iPhone.

Net foi de facto não gerando o código necessário para as partes traseiras pós com base nesse pedaço de informação por si só.

Eu não gosto deste no entanto, porque uma vez que os dispositivos iPhone e outros multimédia pode interpretar javascript, ASP.net está quebrando qualquer aplicativo que depende de servidor gerado JavaScript para funcionar.

Assim, se a comunidade vai permitir isso ... Eu gostaria de mudar minha pergunta oficial para ... Por que será ASP.net não gerar javascript para navegadores específicos e como eu posso transformar este "recurso" off.

*************** End Editar 2 ***************

Eu tenho um problema estranho. Copiei alguns código de trabalho do meu host remoto para o meu computador no trabalho. Quando eu tento usar a página que eu estou recebendo um erro de javascript

__doPostBack is not defined
javascript:__doPostBack('ctl00$ContentPlaceHolder1$login','')()()

Quando eu poucos a fonte da página de saída, com certeza não há nenhum lado do servidor javascript gerado.

Eu tentei criar uma página simples:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="jsTest.aspx.vb" Inherits="_jsTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox ID="tbTest" runat="server"></asp:TextBox><br />
        <asp:LinkButton ID="linkTest" runat="server">LinkButton</asp:LinkButton>
    </form>
</body>
</html>

Codebehind:

Partial Class _jsTest
    Inherits System.Web.UI.Page
    Protected Sub linkTest_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles linkTest.Click
        Response.Write(tbTest.Text)
    End Sub
End Class

recebendo o mesmo erro.

Eu tentei reiniciar (hey, ele funciona metade do tempo), limpou tudo, desde App_Code, global.asax e web.config, acrescentou uma caixa de texto com autopostback = true ... Eu estou fora de ideias.

Alguém pode lançar alguma luz sobre o que está acontecendo aqui?

************** Mais informações ************** Eu apenas tentei tudo de novo no IE e funciona como esperado, os shows fonte da página:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTkxNTA2MDE2NWRkxhZMwlMVwJprcVsvQLJLrTcgaSM=" />

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>
<div>
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK20LZAAuzRsusGAsz0+6YPxxO+Ewv1XsD5QKJiiprrGp+9a3Q=" />
</div>

Enquanto a fonte no Firefox só mostra:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTkxNTA2MDE2NWRkxhZMwlMVwJprcVsvQLJLrTcgaSM=" />

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK20LZAAuzRsusGAsz0+6YPxxO+Ewv1XsD5QKJiiprrGp+9a3Q=" />

Guardar as páginas da web para o desktop e abertura no bloco de notas revela a mesma coisa ...

Foi útil?

Solução

O problema é a maneira padrão ASP.net trata navegadores desconhecidos ... como o iPhone. Apesar de que seria bom para assumir navegadores desconhecidos poderia usar javascript ... você pode especificar quais recursos que um navegador tem na seção de web.config ou Machine.config.

Confira http://slingfive.com/pages/code/browserCaps/ para um browserCaps atualizados config para asp.net

Aqui está um exemplo de um caso para corresponder GECO Baseadas navegadores (Netscape 6+, Mozilla / Firefox, ...)

<case match="^Mozilla/5\.0 \([^)]*\) (Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))?">
                browser=Gecko
                <filter>
                    <case match="(Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))">
                        type=${type}
                    </case>
                    <case> <!-- plain Mozilla if no VendorProductToken found -->
                        type=Mozilla
                    </case>
                </filter>
                frames=true
                tables=true
                cookies=true
                javascript=true
                javaapplets=true
                ecmascriptversion=1.5
                w3cdomversion=1.0
                css1=true
                css2=true
                xml=true
                tagwriter=System.Web.UI.HtmlTextWriter
                <case match="rv:(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))">
                    version=${version}
                    majorversion=0${major}
                    minorversion=0${minor}
                    <case match="^b" with="${letters}">
                        beta=true
                    </case>
                </case>
            </case>

Outras dicas

Antes de reinstalar o Firefox, executá-lo no modo de depuração (acho que é chamado modo de depuração). Ele desliga todos os plugins e que pode ajudá-lo reduzi-lo um pouco. E quanto a outros navegadores como Chrome ou Safari?

Com base na informação nova, eu acho que é claro que este é um problema Firefox (talvez você tem um add-on bloqueando JS), e não uma questão de programação. Eu recebo bons resultados com o seu código usando o VS 2008 e FF3 no XP Pro, como seria de esperar vai mais ninguém tentar isso.

Você pode tentar reinstalar o Firefox, garantir que JS funciona em todos os outros sites, certifique-se localhost não tem permissões de segurança diferentes ...

Você tem conjunto AutoEventWireup como falsa, mas não Override de OnInit para anexar o evento. Tente alterar o AutoEventWireup para true.

Edit: Do mais informações, pode ser que ele está incorretamente identificando Firefox na seção capacidades Brower do seu machine.config. (Ou web.config).

Pode ser também que o JavaScript está desativado no Firefox, e, assim, .NET é determinar que não há nenhum ponto tornando o material Javascript, e deve usar uma abordagem diferente para postback manuseio, se existe tal coisa a.

Você tem certeza que tem ASP.NET instalado em seu servidor web?

Parece que a função __doPostBack() não está sendo gerado porque você não tem eventos do lado do servidor que exigem-lo.

ASP.NET gosta de gerar apenas a função __doPostBack () quando você tem ouvintes de eventos subscrito que iria precisar dele para funcionar corretamente.

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