问题
I used to have the UpdatePanel as a wrapper for the whole Listview item.
<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>
and register the client script as follows...
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
Now i decided to wrap only the group of ImageButtons with update panels as follows...
<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>
and i get the following error
Value cannot be null. Parameter name: control
while executing
ScriptManager.RegisterStartupScript(DirectCast(Page.FindControl("UpdatePanel1"), UpdatePanel), GetType(String), "alertScript", "update('hpClips','false','inc')", True)
I think this has to do with the fact that the updatepanel control was not found. And the Direct cast throws the exception. So how could i fix that? Thank you in advance.
UPDATE: I tried this one too. (This time, i get no exception but the client script is not executed)
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
回答1:
Fixed! The following does the trick
If Not ClientScript.IsClientScriptBlockRegistered(Me.[GetType](), "OtherScript") Then
ScriptManager.RegisterStartupScript(Me.Page, Me.GetType(), Guid.NewGuid.ToString, "update('hpClips','false','inc')", True)
End If
Resources that helped
Problem with ScriptManager.RegisterStartupScript in WebControl nested in UpdatePanel
Add JavaScript programmatically using RegisterStartupScript during an Asynchronous postback
来源:https://stackoverflow.com/questions/5612167/value-cannot-be-null-parameter-name-control