Value cannot be null. Parameter name: control

旧时模样 提交于 2019-12-12 05:03:09

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!