문제

******************** 편집 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>

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

동일한 오류를 얻습니다.

나는 재부팅을 시도했지만 (이봐, 그것은 절반의 시간은 작동 함), app_code, global.asax 및 web.config에서 모든 것을 정리하고 AutoPostback = true가있는 텍스트 상자를 추가했습니다 ... 아이디어가 없습니다.

누구든지 여기서 무슨 일이 일어나고 있는지에 대해 약간의 빛을 발할 수 있습니까?

**************** 추가 정보 ************** 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 Config 파일의 경우

다음은 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>

다른 팁

Firefox를 다시 설치하기 전에 디버그 모드에서 실행하십시오 (디버그 모드라고 생각합니다). 모든 플러그인을 끄고 약간 좁히는 데 도움이 될 수 있습니다. Chrome 또는 Safari와 같은 다른 브라우저는 어떻습니까?

새로운 정보를 기반으로, 이것이 파이어 폭스 문제 (아마도 애드온 차단 JS가 있음)라는 것이 분명하다고 생각합니다. XP Pro에서 VS 2008 및 FF3을 사용하여 코드로 좋은 결과를 얻습니다.

Firefox를 다시 설치하고 JS가 다른 모든 사이트에서 작동하는지 확인하고 LocalHost가 다른 보안 권한이 없는지 확인하십시오 ...

당신은 가지고 있습니다 AutoEventWireup False로 설정하지만 이벤트를 첨부하기 위해 Oninit을 재정의하지 않습니다. 변경해보십시오 AutoEventWireup 사실.

편집 : 더 많은 정보에서 Machine.config의 Brower 기능 섹션에서 Firefox를 잘못 식별 할 수 있습니다. (또는 web.config).

또한 JavaScript가 Firefox에서 꺼져있을 수 있으므로 .NET은 JavaScript 물건을 렌더링하는 점이 없다고 결정하고 있으며, 그러한 것이있는 경우 Postback 처리에 다른 접근 방식을 사용해야합니다.

웹 서버에 ASP.NET이 설치되어 있습니까?

그것은처럼 보인다 __doPostBack() 서버 측 이벤트가 필요하지 않기 때문에 기능이 생성되지 않습니다.

ASP.NET은 이벤트 리스너가 가입 한 경우 올바르게 작동 해야하는 __dopostback () 함수 만 생성하는 것을 좋아합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top