******************** Editar 2 ********************** Resolví el problema. .. Pero no me gustan las implicaciones. Estaba probando nuestra aplicación móvil dirigida a iPhone anteriormente y estaba usando un complemento para enmascarar la cadena de agente de usuario de Firefox como iPhone.

De hecho, .Net NO generó el código requerido para las publicaciones posteriores basadas solo en esa información.

Sin embargo, no me gusta esto, porque dado que el iPhone y otros dispositivos multimedia pueden interpretar JavaScript, ASP.net está rompiendo cualquier aplicación que dependa del servidor JavaScript generado para ejecutarse.

Entonces, si la comunidad lo permite ... Me gustaría cambiar mi pregunta oficial a ... ¿Por qué ASP.net no generará javascript para navegadores específicos y cómo puedo desactivar esta "característica"?

*************** Fin Editar 2 ***************

Tengo un problema extraño Copié un código de trabajo de mi host remoto a mi computadora en el trabajo. Cuando intento usar la página, aparece un error de JavaScript

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

Cuando tengo pocas fuentes de la página de salida, efectivamente no hay JavaScript generado por el lado del servidor.

Intenté crear una página simple:

<%@ 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>

Código detrás:

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

Obteniendo el mismo error.

Intenté reiniciar (hey, funciona la mitad del tiempo), borré todo de App_Code, global.asax y web.config, agregué un cuadro de texto con autopostback = true ... Me quedé sin ideas.

¿Alguien puede arrojar algo de luz sobre lo que está sucediendo aquí?

************** Más información ************** Acabo de intentar todo de nuevo en IE y funciona como se esperaba, la fuente de la página muestra:

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

Mientras que la fuente en Firefox solo muestra:

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

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

Guardar las páginas web en el escritorio y abrirlas en el bloc de notas revela lo mismo ...

5
Birk 27 may. 2009 a las 23:50

6 respuestas

La mejor respuesta

El problema es la forma predeterminada en que ASP.net trata los navegadores desconocidos ... como el iPhone. Aunque sería bueno suponer que navegadores desconocidos podrían usar JavaScript ... puede especificar qué capacidades tiene un navegador en la sección de web.config o machine.config.

Visite http://slingfive.com/pages/code/browserCaps/ para obtener un navegador actualizado archivo de configuración para asp.net

Aquí hay un ejemplo de un caso que coincide con los navegadores basados en GECKO (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>
7
Birk 28 may. 2009 a las 15:56

Según la nueva información, creo que está claro que se trata de un problema de Firefox (quizás tenga un complemento que bloquea JS), y no una pregunta de programación. Obtengo buenos resultados con su código usando VS 2008 y FF3 en XP Pro, como era de esperar, la mayoría de las personas lo intentarán.

Puede intentar reinstalar Firefox, asegurarse de que JS funciona en todos los demás sitios, asegurarse de que localhost no tenga permisos de seguridad diferentes ...

1
CarmineSantini 27 may. 2009 a las 20:35

Antes de reinstalar Firefox, ejecútelo en modo de depuración (creo que se llama modo de depuración). Desactiva todos los complementos y eso puede ayudarlo a reducirlo un poco. ¿Qué pasa con otros navegadores como Chrome o Safari?

2
Gromer 27 may. 2009 a las 20:42

Parece que la función __doPostBack() no se está generando porque no tiene eventos del lado del servidor que lo requieran.

A ASP.NET le gusta generar solo la función __doPostBack () cuando tiene suscriptores de eventos suscritos que lo necesitarían para funcionar correctamente.

0
Dan Herbert 27 may. 2009 a las 19:54

¿Está seguro de que tiene instalado ASP.NET en su servidor web?

0
Chris Dwyer 27 may. 2009 a las 19:53

Tiene AutoEventWireup establecido en falso, pero no Anulación de OnInit para adjuntar el evento. Intenta cambiar AutoEventWireup a verdadero.

Editar: a partir de la mayor información, podría ser que está identificando incorrectamente Firefox en la sección de capacidades del navegador de su machine.config. (o web.config).

También podría ser que JavaScript esté desactivado en Firefox y, por lo tanto, .NET está determinando que no tiene sentido representar el contenido de JavaScript, y debería usar un enfoque diferente para el manejo de la devolución de datos, si existe tal cosa.

1
David McEwing 27 may. 2009 a las 20:39