ASP.NET: внедрение Javascript во время выполнения (с включенным AJAX) - PullRequest
2 голосов
/ 14 марта 2011

Моя кнопка Image существует в объекте ListView и UpdatePanel

<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>

В случае события ListView ItemCommand я проверяю, существует ли запись в базе данных. Если его не существует, я просто добавляю его. Теперь, если запись существует, я хотел бы показать 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 ]

2 голосов
/ 14 марта 2011

Код Лава почти готов, но поскольку ваши элементы находятся в 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

Вместо этого мы собираемся использовать ScriptManager, например так:

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

Обратите внимание, что мы используем метод RegisterStartupScript, потому что мы хотим, чтобы скрипт запускался сразу после частичной обратной передачизавершено.

1 голос
/ 14 марта 2011

Посмотрите на эту статью .

Вот фрагмент кода, который вы можете использовать для отображения сообщения JavaScript по требованию

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
...