我在 Visual Studio 项目(.NET 框架 3.5)中有一个简单的 ASP.NET 下拉列表控件,一旦所选索引更改并成功回发到服务器,它就会触发回发。采用相同的简单 ASP.NET 下拉列表控件并将 Visual Studio 项目升级到 .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 框架 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 的浏览器。非常感谢任何帮助,谢谢!