********************编辑2 ********************** 我想通了这个问题...但我不喜欢的影响。我在测试我们的iPhone有针对性的移动应用较早,使用插件来掩盖Firefox的用户代理字符串作为一个iPhone。

净物INFACT不产生基于该块的单独信息用于后背上所需的代码。

我不,喜欢这个但是因为自iPhone和其它多媒体设备可以解释的javascript,ASP.net是打破依赖于服务器生成的JavaScript来运行的任何应用程序。

因此,如果社会允许的话......我想改变我的官方回答的......为什么会ASP.net不能为特定浏览器的JavaScript,我怎么可以把这个“功能”了。

***************结束编辑2 ***************

我有一个奇怪的问题。我复制从我的远程主机的一些工作的代码到我的工作电脑。当我尝试使用页面我得到一个JavaScript错误

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

当我几个输出页源,果然没有服务器侧生成的JavaScript。

我试图创建一个简单的页面:

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

代码隐藏:

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

得到同样的错误。

我试图重新启动(嘿,它的工作原理一半的时间),从App_Code文件,Global.asax中和web.config中清除了一切,添加一个文本框与自动回=真...我的想法。

任何人都可以提供一些线索在这里发生了什么?

**************更多信息************** 我只是在IE中再次尝试了一切,它工作正常,页面的源代码所示:

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

虽然在Firefox源仅示出了:

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

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

保存网页到桌面开放在记事本中揭示了同样的事情...

有帮助吗?

解决方案

问题是默认的方式ASP.net对待未知的浏览器...比如iPhone。尽管这将是很好的假设未知的浏览器可以使用JavaScript ...你可以指定浏览器在web.config文件或machine.config中的部分什么样的能力。

查核 http://slingfive.com/pages/code/browserCaps/ 以用于asp.net一个更新的browserCaps配置文件

下面是匹配基于Gecko浏览器的情况下的例子(Netscape 6以上,Mozilla的/火狐,...)

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

其他提示

您重新安装的Firefox之前,在调试模式下运行它(我认为这就是所谓的调试模式)。它会关闭所有的插件,并且可以帮助你缩小下来一点。其他浏览器如Chrome或Safari浏览器?

什么

根据新的信息,我认为这是明显的,这是一个Firefox的问题(也许你有一个附加阻挡JS),而不是一个编程的问题。我得到优秀成果使用VS 2008和FF3在XP专业版的代码,我期望将最有其他人尝试它。

您可以尝试重新安装火狐,确保JS适用于所有其他网站,确保本地主机不具有不同权限的安全...

您已经AutoEventWireup设置为false,但没有的OnInit的覆盖附加的事件。尝试改变AutoEventWireup为true。

编辑:从所述详细信息可能是因为它被不正确地识别的Firefox在machine.config中的布劳尔功能部。 (或web.config中)。

这也可能是JavaScript是在Firefox关断,并因此.NET被确定为没有点呈现的Javascript的东西,应该使用不同的方法来处理回传,如果有这样的事情。

您确定您已经安装在Web服务器上ASP.NET?

它看起来像没有被产生__doPostBack()功能,因为你需要它没有服务器端事件。

ASP.NET喜欢,当你有事件侦听器订阅,将需要它才能正常工作,只产生__doPostBack()函数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top