1、首先根据字面的意思是:触发器找不到ID 为XX的控件。但是我的控件ID明明就在那里放着。这有发生的情况可能如下:(注意:也就是解释为什么找不到)首先如果 这个控件ID 不作为 GridView等一些数据控件内的模板项目时候,不会出现这有的错误。但是 当如下图所示的情况:UploadButton作为GridView中的Itemtemple 模板中的项时,此时这个UploadButton是直接获取不到的。你可以在cs文件中 直接打UploadButton试试,是不会出现智能提示的,也是没有这个对象的。
2、因为作为一个条目的模板。UploadControl 这个ID 会是变化的。可以在网页的源代码中查看。如下图:
3、那么如何解决这个问题:如果想绑定一个 争犸禀淫<Triggers> <asp:AsyncPostBackTrigger /> </Triggers&爿讥旌护gt;那么可以采用代码绑定的方式。比如在GridView加载完数据后进行绑定。比如遍历每个GridViewRow 然后查找ID 为r.FindControl("UploadButton")然后给他进行注册。 GridViewRowCollection coll = GridView1.Rows; ScriptManager sm = Master.FindControl("ScriptManager1") as ScriptManager; foreach (GridViewRow r in coll) { // sm.RegisterPostBackControl(r.FindControl("UploadButton")); sm.RegisterAsyncPostBackControl(r.FindControl("UploadButton")); }其中:RegisterAsyncPostBackControl 是真正的异步方式。而 :RegisterPostBackControl 还是全页回发。上面2个方法分别对应:trigger中的 <Triggers> <asp:AsyncPostBackTrigger /> <asp:PostBackTrigger /> </Triggers>
4、其实。如果真正采用这有的方式还不如采用:绑定:觊皱筠桡CommandName、CommandArgument的方式进行操作。如图所示“ <锾攒揉敫asp:Button id="UploadButton" Text="更新当前时间" runat="server" CommandName="UpdateTime" CommandArgument="<%Bind(CurTime) %>"> </asp:Button> 可以在GriView中的RowCommand 事件中进行处理。
5、处理事件:如图所示: