2012-04-27 47 views
1

我在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的瀏覽器一起工作。任何幫助非常感謝,謝謝!

回答

0

的解決方案是一個 「App_Browsers文件」 文件夾添加到我的網站項目。然後添加一個「AdobeAir.Browser」文件。這是一個包含我的自定義瀏覽器屬性的xml文件。請參閱http://msdn.microsoft.com/en-us/library/ms228122.aspx瞭解更多信息。

.NET框架4位於C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ Browsers的瀏覽器定義文件與在C:\ Windows \ Microsoft.NET \ Framework64中找到的文件相比有點輕\ v2.0.50727 \ CONFIG \ Browsers因此我的自定義瀏覽器在.NET框架之前工作4

0

我在本地機器上覆制了你的ASPX和ASPX.cs,並且它與.NET framework 4.0一起工作正常。我可以看到dropdown有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> 
+0

你好,是我的網頁。配置確實包含targetFramework =「4.0」等我知道這不是一個瀏覽器,如鉻和Firefox的問題,但這個問題似乎更相關的事實,我必須使用基於Adobe AIR 3.2的瀏覽器 – Damien 2012-04-27 20:49:55

相關問題