私は、選択したインデックスが変更されてポストバックするトリガースタジオプロジェクト(.NET Framework 3.5)で単純なASP.NETドロップダウンリストコントロールを使用しますサーバーに正常に戻ります。 同じ単純なASP.NETドロップダウンリストコントロールを使用し、Visual Studioプロジェクトを.NET Framework 4.0にアップグレードすると、ポストバックは発生しません。以下は.....NET Framework 3.5から4.0にアップグレードした後にドロップダウンリストにブラウザポストバックがありません
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
}
はFirebugのショーを使用したブラウザでレンダリングされたHTMLをページ上のマークアップのサンプル(ページのみがドロップダウンリストが含まれています)
<body>
<form id="form1" runat="server" >
<asp:DropDownList ID="ddlTest" OnSelectedIndexChanged="ddlTestIndexChanged" runat="server"
AutoPostBack="true" />
</form>
</body>
そして、背後にあるコードで表示されますプロジェクトは、.NET Framework上で実行され、次の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>
と3.5同じプロジェクトは、.NET Framework上で実行されたときにレンダリングされたHTMLを表示する4.0
<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コードを比較することから、後者の断片は、ポストバックを行うためのJavaScript自体とともにドロップダウンリストの「のonchange」イベントが欠落していることがわかります。私のweb.configには下位互換性のための以下のものが含まれていますが、これは動作していません。
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
マークアップに欠けているJavascriptを追加しようとしましたが、機能しませんでした。 はまた、背後にあるコードからのonchangeイベント+ JavaScriptを追加しようとしたが、それはどちらか
環境動作しませんでした:
- のAdobe AIR 3.2ベースのブラウザ(ブラウザのコードへのアクセスなし)
- のWindows 7 - 64ビットマシン
- のVisual Studio 2010
- C#
私は承知していますこの問題は大半のブラウザでは問題ではありませんが、Adobe AIR 3.2ベースのブラウザで作業する必要がある作業プロジェクトの一部として問題になることがあります。どんな助けも大歓迎です、ありがとう!
こんにちは、はい私のウェブ。configにはtargetFramework = "4.0"などが含まれています。これはchromeやfirefoxなどのブラウザでは問題ではないことを認識していますが、問題はAdobe AIR 3.2ベースのブラウザ – Damien