我在Visual Studio項目(.NET Framework 3.5)中有一個簡單的ASP.NET dropdownlist控件,一旦選定的索引被更改,它就會觸發回發,成功回到服務器。 採用相同的簡單ASP.NET下拉列表控件並將Visual Studio項目升級到.NET Framework 4.0,結果無回發。下面是頁面上的標記的樣品(頁只包含一個下拉列表)從.NET Framework 3.5升級到4.0後,沒有瀏覽器在dropdownlist上回發
<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
}
使用Firebug顯示查看呈現的HTML瀏覽器當項目是在.NET Framework上運行下面的HTML 3.5
<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>
和觀看呈現的HTML當同一項目在.NET Framework 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代碼,可以看到後面的代碼片段在下拉列表中缺少「onchange」事件以及javascript本身執行回發。我的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的瀏覽器一起工作。任何幫助非常感謝,謝謝!
你好,是我的網頁。配置確實包含targetFramework =「4.0」等我知道這不是一個瀏覽器,如鉻和Firefox的問題,但這個問題似乎更相關的事實,我必須使用基於Adobe AIR 3.2的瀏覽器 – Damien 2012-04-27 20:49:55