2011-03-13 5 views
2

내하여 ImageButton이 ListView 객체 내에 존재하고 ListView ItemCommand 이벤트에서 UpdatePanelASP.NET (AJAX가 활성화 된)

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
       <asp:ListView ID="ListView1" runat="server"> 
       <ItemTemplate> 
         <asp:ImageButton ID="btnAttach" runat="server" OnClientClick="update('Clip','false','inc')" ImageUrl="~/Images/Image.png" CommandName='<%# DataBinder.Eval(Container.DataItem, "ID")'/> 
       </ItemTemplate> 
      </asp:ListView> 
    </ContentTemplate> 
</asp:UpdatePanel> 

난 레코드가 데이터베이스에 존재하는지 확인하기 위해 검사를 수행 런타임에 자바 스크립트를 주입 . 존재하지 않으면 간단히 추가합니다. 이제 레코드가 존재하는 경우 해당 레코드가 이미 있음을 표시하는 JavascriptMessage를 표시하려고합니다.

Private Sub ListView1_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewCommandEventArgs) Handles ListView1.ItemCommand 
     If Not RecordExists() Then 
      InsertRecord() 
     Else 
      Show JavascriptMessage (Record Already Exists!) 
     End If 
End Sub 

어떻게하면됩니까? Show JavascriptMessage의 몇 가지 다른 버전을 시도했지만 아무 것도 작동하지 않았습니다!

답변

2

라브의 코드는 거의있다, 그러나 당신의 요소가 UpdatePanel에 있기 때문에 당신은 다음과 같이 변경해야합니다

sb.Append("<script language='javascript'>") 
sb.Append("alert('TestMessage')") 
sb.Append("</script>") 

사실,이 라인 1과 3 우리는 자동 스크립트 태그를 추가 할 말하려고하고 있기 때문에 제거 할 수 있습니다, 그래서 우리는 단지 단순화 할 수 있습니다 말 :

Dim s as String 
s = "alert('TestMessage')" 

ClientScript 대신에 ScriptManager을 사용합니다. 대신

If Not ClientScript.IsClientScriptBlockRegistered(t, "PopupScript") Then 
    ClientScript.RegisterClientScriptBlock(t, "PopupScript", sb.ToString()) 
End If 

, 우리는과 같이, 스크립트 관리자를 사용하는 겁니다 : 우리가 RegisterStartupScript 방법을 사용

If Not ScriptManager.IsClientScriptBlockRegistered(Me, "PopupScript") Then 
    ScriptManager.RegisterStartupScript(Me, GetType(Page), "PopupScript", s, True) 
End If 

주 우리는 부분 다시 게시가 완료되는 스크립트가 즉시 실행되도록 원하기 때문에 .

+0

안녕하세요. http://stackoverflow.com/questions/5612167/value-cannot-be-null-parameter-name-control – OrElse

1

이 부분을보세요. article. 여기

는 수요에 자바 스크립트 메시지를 표시하는 데 사용할 수있는 코드 조각입니다

Dim sb As New System.Text.StringBuilder() 
sb.Append("<script language='javascript'>") 
sb.Append("Alert('TestMessage')") 
sb.Append("/script>") 
'register with ClientScript 
'The RegisterStartupScript method is also slightly different 
Dim t As Type = Me.[GetType]() 
If Not ClientScript.IsClientScriptBlockRegistered(t, "PopupScript") Then 
    ClientScript.RegisterClientScriptBlock(t, "PopupScript", sb.ToString()) 
End If 
+0

이미 시도했지만 작동하지 않습니다. 나는 그것이 부분 포스트 백과 관련이 있다고 생각한다. – OrElse

+0

@ Chocol8,이 코드는 작동합니다. 부분적인 포스트 백을 수행하는 경우 ClientScript 대신 ScriptManager.RegisterClientScriptBlock을 사용해야 할 수 있습니다. – Pandincus

+0

@ Chocol8 여기 좀보세요 : -> http://stackoverflow.com/questions/545290/does-the-clientscriptmanager-work-when-called-in-partial-postback – Pandincus

관련 문제