5

********************編集 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 のテキスト ボックスを追加しました... アイデアがありません。

ここで何が起こっているのか、誰かが光を当てることができますか?

**************詳細情報**************** 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=" />

ウェブページをデスクトップに保存してメモ帳で開くと、同じことがわかります...

4

6 に答える 6

7

問題は、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>
于 2009-05-28T15:56:30.637 に答える
2

Firefox を再インストールする前に、デバッグ モードで実行してください (デバッグ モードと呼ばれていると思います)。すべてのプラグインをオフにするので、少し絞り込むのに役立ちます。Chrome や Safari などの他のブラウザはどうですか?

于 2009-05-27T20:42:48.173 に答える
1

AutoEventWireupfalseに設定しましたが、イベントを添付するためのOnInitのオーバーライドはありません。AutoEventWireupをtrueに変更してみてください。

編集:詳細情報から、machine.configのブラウザ機能セクションでFirefoxを誤って識別している可能性があります。(またはweb.config)。

また、FirefoxでJavaScriptがオフになっている可能性もあります。したがって、.NETは、Javascriptをレンダリングする意味がないと判断しているため、そのような場合は、ポストバック処理に別のアプローチを使用する必要があります。

于 2009-05-27T20:04:46.797 に答える
1

新しい情報に基づくと、これは Firefox の問題 (おそらく JS をブロックするアドオンがある) であり、プログラミングの問題ではないことは明らかだと思います。XP Pro で VS 2008 と FF3 を使用してコードを使用すると、他のほとんどの人が試してみると予想されるように、良い結果が得られます。

Firefox を再インストールしてみてください。JS が他のすべてのサイトで動作することを確認し、localhost に別のセキュリティ権限がないことを確認してください...

于 2009-05-27T20:35:16.860 に答える
0

WebサーバーにASP.NETがインストールされていますか?

于 2009-05-27T19:53:38.053 に答える
0

__doPostBack()関数を必要とするサーバー側のイベントがないため、関数が生成されていないようです。

ASP.NETは、正しく機能するために必要なイベントリスナーをサブスクライブしている場合にのみ、__ doPostBack()関数を生成することを好みます。

于 2009-05-27T19:54:29.690 に答える