ASP.net没有为某些用户代理生成javascript
********************编辑2 **********************
我想出了问题……但我不喜欢这个问题.我之前正在测试我们的iPhone目标移动应用程序,并使用插件将Firefox的用户代理字符串屏蔽为iPhone. .Net实际上并没有根据这条信息生成所需的回发代码. 我不喜欢这样,因为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中的所有内容,添加了一个带有autopostback = true的文本框…我没有想法. 任何人都可以了解这里发生的事情吗? **************更多信息************** <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 / 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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- vbscript – 在赋值中使用Set时“需要对象”
- asp.net-mvc – 处理CORS预检请求到ASP.NET MVC操作
- AOP in dotnet :AspectCore的参数拦截支持
- asp.net-mvc – 怎么样?控制器返回任何/当前视图
- asp.net – 在C#后面的代码中实现javascript确认框
- 在ASP.NET中使用数据源控件真的很专业吗?
- asp.net – 为什么Visual Studio会为您提供WebForms的Page_
- ASP.net C#:如何使用File.ReadLines(fileName).GetEnumera
- asp.net-mvc-3 – ASP.NET MVC 3中ModelState.IsValid的限制
- asp.net – 从ListView ItemDataBound事件处理程序中的Data