2

選択したインデックスが変更され、サーバーに正常にポストバックされると、ポストバックをトリガーするビジュアル スタジオ プロジェクト (.NET Framework 3.5) に単純な ASP.NET ドロップダウン リスト コントロールがあります。同じ単純な ASP.NET ドロップダウン リスト コントロールを使用して、ビジュアル スタジオ プロジェクトを .NET Framework 4.0 にアップグレードすると、ポストバックは発生しません。以下は、ページ上のマークアップのサンプルです (ページにはドロップダウン リストのみが含まれます)。

<body>
  <form id="form1" runat="server" >
    <asp:DropDownList ID="ddlTest" OnSelectedIndexChanged="ddlTestIndexChanged" runat="server"
     AutoPostBack="true" />
 </form> 
</body>

そしてコードビハインドで....

public void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                var list = new List<string>();
                list.Add("Hello");
                list.Add("World");
                ddlTest.DataSource = list;
                ddlTest.DataBind();
            } 
        }
        protected void ddlTestIndexChanged(object sender, EventArgs e)
        {  
            //selected index changed...success
        }

プロジェクトが .NET Framework 3.5 で実行されている場合、FireBug を使用してブラウザーでレンダリングされた html を表示すると、次の html が表示されます。

<body>
 <form name="form1" method="post" action="Default.aspx" id="form1">
 <div>
 <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
 <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
 <input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="">
 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="has a value">
</div>
 <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="Has a value">
</div>
 <select name="ddlTest" onchange="javascript:setTimeout('__doPostBack(\'ddlTest\',\'\')', 0)" id="ddlTest">
 <option value="Hello">Hello</option>
 <option selected="selected" value="World">World</option>
</select>
</form>
</body>

同じプロジェクトを .NET Framework 4.0 で実行すると、レンダリングされた html が表示されます。

<body>
 <form name="form1" method="post" action="/Default.aspx" id="form1">
 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="has a value">
 <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="has a value">
 <select name="ddlTest" id="ddlTest">
 <option selected="selected" value="Hello">Hello</option>
 <option value="World">World</option>
</select>
</form>
</body>

両方のスニペットの HTML コードを比較すると、後者のスニペットにはドロップダウン リストの「onchange」イベントと、ポストバックを行うための JavaScript 自体が欠落していることがわかります。私の web.config には、下位互換性のために次のものが含まれていますが、これも機能していないようです。

<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>

また、不足している Javascript をマークアップに追加しようとしましたが、うまくいきませんでした。また、コード ビハインドから onchange イベント + JavaScript を追加しようとしましたが、それも機能しませんでした

環境:

  • Adobe AIR 3.2 ベースのブラウザー (ブラウザー コードへのアクセスなし)
  • Windows 7 – 64 ビット マシン
  • ビジュアルスタジオ 2010
  • C#

この問題は大部分のブラウザーでは問題にならないことは承知していますが、作業プロジェクトの一部として、Adobe AIR 3.2 ベースのブラウザーで動作する必要があります。どんな助けでも大歓迎です、ありがとう!

4

2 に答える 2

0

解決策は、「App_Browsers」フォルダーを Web サイト プロジェクトに追加することでした。次に、「AdobeAir.Browser」ファイルを追加します。これは、カスタム ブラウザの属性を含む xml ファイルです。詳細については、 http://msdn.microsoft.com/en-us/library/ms228122.aspxを参照してください。

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers にある .NET Framework 4 ブラウザー定義ファイルは、C:\Windows\Microsoft.NET\Framework64\v2.0.50727 にあるものと比べて少し軽量です。 \CONFIG\Browsers したがって、カスタム ブラウザは .NET Framework 4 より前で動作しました。

于 2012-05-19T01:15:40.620 に答える
0

ASPX と ASPX.cs をローカル マシンにコピーしましたが、.NET Framework 4.0 で問題なく動作しています。ドロップダウンに onchange イベントがあることがわかります。

<select id="ddlTest" onchange="javascript:setTimeout('__doPostBack(\'ddlTest\',\'\')', 0)" name="ddlTest">
    <option value="Hello" selected="selected">Hello</option>
    <option value="World">World</option>

</select>

web.config をチェックして、targetFramework を確認します。

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>

</configuration>
于 2012-04-27T19:58:59.943 に答える