最近,我将我的解决方案升级到4.0,并且所有内容似乎都已顺利升级,但是对于ASP.NET AJAX。
我有一个像这样的UpdatePanel:
<asp:UpdatePanel ID="pnlAdvSearch" UpdateMode="conditional" runat="server">
<ContentTemplate>
<asp:Button ID="btnHidden" Runat="server" OnClick="btnHidden_Click"
ClientIDMode="Static"/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnHidden" EventName="Click"/>
</Triggers>
</asp:UpdatePanel>
我有一个提前输入文本框,可以在Click / Enter等上触发btnHidden_Click
事件。我在文本框上调用以下方法点击/输入。
function getSelectionId() {
__doPostBack(
'<%=btnHidden.ClientID%>',
document.getElementById('<%=txtLocation.ClientID %>').value
);
theForm.__EVENTARGUMENT.value = "";
}
我可以看到发生回发并且Page_Load
正在执行。但是,服务器端btnHidden_Click
永远不会被解雇。我不想在页面级别禁用事件验证。我在这做错了什么? :(
答案 0 :(得分:1)
首先,确保将程序集设置为以.NET 4.0 Framework为目标,然后查看web.config文件。您可能会对可以删除的ASP.NET 2.0下执行ASP.NET AJAX操作所需的设置进行大量引用。
具体来说,请检查<compilation>
和<httpHandlers>
下的<system.web>
代码和system.webServer
代码。
例如,您可能会在编译&gt;下看到如下内容:组件:
<compilation>
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
最有可能删除这些引用。此外,<pages>
,<httpHandlers>
和<httpModules>
下的一系列设置也可能会被移除。
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
答案 1 :(得分:0)
这就是我最终在Page_Load上做的事情。
if (Page.Request.Params.Get("__EVENTTARGET") == "btnHidden") //Workaround hack for AsyncPostBackTrigger fail
this.btnHidden_Click(null, null);
当发生异步回发时,我只是明确地触发事件。有点hacky,但不值得花费更多的时间:)