我曾经将 UpdatePanel 作为整个 Listview 项目的包装器。
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<asp:PlaceHolder id="itemPlaceholder" runat="server" />
</LayoutTemplate>
<ItemTemplate>
'....
</ItemTemplate>
</asp:ListView>
</ContentTemplate>
<Triggers></Triggers>
</asp:UpdatePanel>
并按如下方式注册客户端脚本...
Private Sub ListView1_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewCommandEventArgs) Handles ListView1.ItemCommand
if Not ClientScript.IsClientScriptBlockRegistered(Me.[GetType](), "OtherScript") Then
ScriptManager.RegisterStartupScript(DirectCast(Page.FindControl("UpdatePanel1"), UpdatePanel), GetType(String), "alertScript", "update('hpClips','false','inc')", True)
End If
End sub
现在我决定只用更新面板包装 ImageButtons 组,如下所示......
<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<asp:PlaceHolder id="itemPlaceholder" runat="server" />
</LayoutTemplate>
<ItemTemplate>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always" RenderMode="Block">
<ContentTemplate>
<asp:ImageButton ID="btnAttach" runat="server" CommandName='<%# "AddC_" & Eval("QID") & "_" & Eval("Label") %>'/>
<asp:ImageButton ID="btnFavorite" runat="server" CommandName='<%# "AddF_" & Eval("QID") & "_" & Eval("Label") %>'/>
</ContentTemplate>
</asp:UpdatePanel>
</ItemTemplate>
</asp:ListView>
我收到以下错误
Value cannot be null. Parameter name: control
在执行时
ScriptManager.RegisterStartupScript(DirectCast(Page.FindControl("UpdatePanel1"), UpdatePanel), GetType(String), "alertScript", "update('hpClips','false','inc')", True)
我认为这与没有找到更新面板控件有关。直接演员抛出异常。那么我该如何解决呢?先感谢您。
更新:我也试过这个。(这一次,我没有例外,但客户端脚本没有执行)
Private Sub ListView1_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewCommandEventArgs) Handles ListView1.ItemCommand
Dim UpdPanel As New UpdatePanel
For Each Up As UpdatePanel In e.Item.Controls.OfType(Of UpdatePanel)()
UpdPanel = Up
Next
if Not ClientScript.IsClientScriptBlockRegistered(Me.[GetType](), "OtherScript") Then
ScriptManager.RegisterStartupScript(DirectCast(UpdPanel, UpdatePanel), GetType(String), "alertScript", "update('hpClips','false','inc')", True)
End If
End sub