If you haven't guessed by the number of questions I'm asking, I'm in the process of learning ASP.NET as well as using it to update a website.
This problem deals with Validation. Basically, I have two buttons within a table that have the functions of Editing corresponding data in the table and Deleting the corresponding data. When each (image)button is pressed, the appropriate even should occur, per the event handlers added to each control upon creation (showAnnouncements() sub). This works alright except I must click each button twice. On the first click, the page performs a postback and the validation controls for a separate function are activated. Then on the second click, it performs correctly. I have set the validation controls, the validation summary, and the controls that are validated by this separate function to a separate validation group and I have set these imagebuttons' CausesValidation property to false, which should prevent the firing of Validation controls. Why is this occuring, and how can I fix it?
My code is below:
page.aspx
<%@ Page Language="VB" MasterPageFile="~/lib/Normal.master"
AutoEventWireup="false" CodeFile="mng_announcement.aspx.vb"
Inherits="maint_mng_announcement" title="Announcement - Zekiah Technologies Intranet"
ValidateRequest="false" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Body" Runat="Server">
<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0"
>
<asp:View ID="NormalView" runat="server">
<br />
<asp:Table ID="tblAnnouncementsOuter" runat="server"
CellSpacing="0" BorderColor="black" Borderwidth="1" Width="75%"
cellPadding="2">
<asp:TableHeaderRow BackColor="gray" ForeColor="white">
<asp:TableCell Width="5%" HorizontalAlign="center">
</asp:TableCell>
<asp:TableCell Width="15%" HorizontalAlign="left">
TITLE
</asp:TableCell>
<asp:TableCell Width="60%" HorizontalAlign="left">
ANNOUNCEMENT
</asp:TableCell>
<asp:TableCell Width="15%"
HorizontalAlign="center">
DATE
</asp:TableCell>
<asp:TableCell Width="5%" HorizontalAlign="center">
ACTIVE
</asp:TableCell>
</asp:TableHeaderRow>
<asp:TableRow>
<asp:TableCell ColumnSpan="5">
<asp:Label ID="lblNoAnnouncements"
runat="server" Text="Sorry, there are no announcements on the database."
forecolor="red" Visible="false"></asp:Label>
<asp:Table ID="tblAnnouncements" runat="server"
Visible="false" CellSpacing="0" CellPadding="2" Width="100%">
</asp:Table>
</asp:TableCell>
</asp:TableRow>
<asp:TableFooterRow BackColor="gray">
<asp:TableCell>
<asp:Button ID="btnAdd" runat="server"
Text="Add" class="btnSubmitType" onmouseover="this.className = 'btnSubmitHov'"
onmouseout="this.className='btnSubmitType'" CausesValidation="true" />
</asp:TableCell>
<asp:TableCell>
<asp:TextBox ID="txtTitle" runat="server"
Width="90%" ValidationGroup="AddAnnouncement"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1" runat="server" ErrorMessage="You must submit a title for your
announcement."
ControlToValidate="txtTitle">*</asp:RequiredFieldValidator>
</asp:TableCell>
<asp:TableCell HorizontalAlign="left">
<asp:TextBox ID="txtAnnouncement"
runat="server" TextMode="multiline" Width="90%"
ValidationGroup="AddAnnouncement"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator2" runat="server" ErrorMessage="You must submit an announcement
to...well submit an anouncement."
ControlToValidate="txtAnnouncement">*</asp:RequiredFieldValidator>
</asp:TableCell>
<asp:TableCell>
<asp:TextBox ID="txtDate" runat="server"
Width="90%" ValidationGroup="AddAnnouncement"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator3" runat="server" ErrorMessage="You must submit a date for your
announcement."
ControlToValidate="txtDate">*</asp:RequiredFieldValidator>
</asp:TableCell>
<asp:TableCell>
<asp:CheckBox ID="chkActive" runat="server" />
</asp:TableCell>
</asp:TableFooterRow>
</asp:Table>
** Announcement title and text can be written plain text or
formatted with HTML **
<asp:ValidationSummary ID="ValidationSummary1"
runat="server" DisplayMode="BulletList" ShowMessageBox="true" ShowSummary="false"
ValidationGroup="AddAnnouncement" />
</asp:View>
<asp:View ID="EditView" runat="server">
<br />
<asp:Table ID="Table1" runat="server" CellSpacing="0"
BorderColor="black" Borderwidth="1" Width="75%" cellPadding="2">
<asp:TableHeaderRow BackColor="gray" ForeColor="white">
<asp:TableCell Width="10%"
HorizontalAlign="center">
</asp:TableCell>
<asp:TableCell Width="15%" HorizontalAlign="left">
TITLE
</asp:TableCell>
<asp:TableCell Width="60%" HorizontalAlign="left">
ANNOUNCEMENT
</asp:TableCell>
<asp:TableCell Width="10%"
HorizontalAlign="center">
DATE
</asp:TableCell>
<asp:TableCell Width="5%" HorizontalAlign="center">
ACTIVE
</asp:TableCell>
</asp:TableHeaderRow>
<asp:TableRow ID="rowEdit" BackColor="skyblue">
<asp:TableCell HorizontalAlign="center">
<asp:Button ID="btnSubmit" runat="server"
Text="Submit" ValidationGroup="EditAnnouncement" class="btnSubmitType"
onmouseover="this.className = 'btnSubmitHov'"
onmouseout="this.className='btnSubmitType'"/>
<br />
<asp:Button ID="btnCancel" runat="server"
Text="Cancel" class="btnSubmitType" onmouseover="this.className =
'btnSubmitHov'" onmouseout="this.className='btnSubmitType'"/>
</asp:TableCell>
<asp:TableCell HorizontalAlign="left">
<asp:TextBox ID="txtTitleEdit" runat="server"
Width="90%" ValidationGroup="EditAnnouncement"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator6" runat="server" ErrorMessage="You must submit a title for your
announcement."
ControlToValidate="txtTitle">*</asp:RequiredFieldValidator>
</asp:TableCell>
<asp:TableCell HorizontalAlign="left">
<asp:TextBox ID="txtAnnouncementEdit"
runat="server" Width="90%" TextMode="multiline"
ValidationGroup="EditAnnouncement"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator5" runat="server" ErrorMessage="You must submit an announcement
to...well submit an anouncement."
ControlToValidate="txtAnnouncement">*</asp:RequiredFieldValidator>
</asp:TableCell>
<asp:TableCell HorizontalAlign="center">
<asp:TextBox ID="txtDateEdit" runat="server"
ValidationGroup="EditAnnouncement" Width="90%"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator4" runat="server" ErrorMessage="You must submit a date for your
announcement."
ControlToValidate="txtDate">*</asp:RequiredFieldValidator>
</asp:TableCell>
<asp:TableCell HorizontalAlign="center">
<asp:CheckBox ID="chkActiveEdit" runat="server"
/>
</asp:TableCell>
</asp:TableRow>
<asp:TableFooterRow BackColor="gray">
<asp:TableCell ColumnSpan="5">
</asp:TableCell>
</asp:TableFooterRow>
</asp:Table>
** Announcement title and text can be written plain text or
formatted with HTML **
<asp:ValidationSummary ID="ValidationSummary2"
runat="server" DisplayMode="BulletList" ShowMessageBox="true" ShowSummary="false"
ValidationGroup="EditAnnouncement" />
</asp:View>
</asp:MultiView>
</asp:Content>
Partial Class maint_mng_announcement
Inherits System.Web.UI.Page
Dim AnnouncementID As String
Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Call showAnnouncements()
End Sub
Sub showAnnouncements()
Dim Conn As New
Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("sysObjDBConnectionString").ConnectionString)
Dim Cmd As New Data.SqlClient.SqlCommand("SELECT
announcement_id, announcement_title, announcement_text, announcement_dt,
announcement_active FROM ANNOUNCEMENT", Conn)
Dim aReader As Data.SqlClient.SqlDataReader
Dim TR As TableRow
Dim TC As TableCell
Dim imgEdit As ImageButton
Dim imgTrash As ImageButton
Dim chkEnabled As CheckBox
Dim c As Boolean
Conn.Open()
aReader = Cmd.ExecuteReader
tblAnnouncements.Visible = False
lblNoAnnouncements.Visible = False
If aReader.Read Then
tblAnnouncements.Rows.Clear()
Do
TR = New TableRow
TR.BackColor = IIf(c = True, Drawing.Color.White,
Drawing.Color.LightBlue)
TC = New TableCell
TC.HorizontalAlign = HorizontalAlign.Center
TC.Width = tblAnnouncementsOuter.Rows(0).Cells(0).Width
imgEdit = New ImageButton
imgEdit.ImageUrl = "~/images/edit.gif"
imgEdit.CommandArgument = aReader("announcement_id")
imgEdit.CausesValidation = False
imgEdit.ValidationGroup = "Edit"
AddHandler imgEdit.Command, AddressOf Me.EditItem
TC.Controls.Add(imgEdit)
Dim lbl As New Label
lbl.Text = (" ")
TC.Controls.Add(lbl)
imgTrash = New ImageButton
imgTrash.ImageUrl = "~/images/t_can.gif"
imgTrash.CommandArgument = aReader("announcement_id")
imgTrash.CausesValidation = False
imgTrash.ValidationGroup = "Trash"
imgTrash.OnClientClick = "if (confirm('Are you sure you
want to delete this item?')){form1.submit;}"
AddHandler imgTrash.Command, AddressOf Me.DeleteItem
TC.Controls.Add(imgTrash)
TR.Cells.Add(TC)
TC = New TableCell
TC.Width = tblAnnouncementsOuter.Rows(0).Cells(1).Width
TC.HorizontalAlign = HorizontalAlign.Left
TC.Text = aReader("announcement_title")
TR.Cells.Add(TC)
TC = New TableCell
TC.Width = tblAnnouncementsOuter.Rows(0).Cells(2).Width
TC.HorizontalAlign = HorizontalAlign.Left
TC.Text = aReader("announcement_text")
TR.Cells.Add(TC)
TC = New TableCell
TC.Width = tblAnnouncementsOuter.Rows(0).Cells(3).Width
TC.HorizontalAlign = HorizontalAlign.Center
TC.Text = aReader("announcement_dt")
TR.Cells.Add(TC)
TC = New TableCell
TC.Width = tblAnnouncementsOuter.Rows(0).Cells(4).Width
TC.HorizontalAlign = HorizontalAlign.Center
chkEnabled = New CheckBox
chkEnabled.Enabled = False
chkEnabled.Checked = aReader("announcement_active")
TC.Controls.Add(chkEnabled)
TR.Cells.Add(TC)
tblAnnouncements.Rows.Add(TR)
If c = True Then
c = False
Else
c = True
End If
Loop While aReader.Read
tblAnnouncements.Visible = True
Else
lblNoAnnouncements.Visible = True
End If
Conn.Close()
End Sub
Sub EditItem(ByVal sender As Object, ByVal e As CommandEventArgs)
AnnouncementID = e.CommandArgument
MultiView1.ActiveViewIndex += 1
End Sub
Sub DeleteItem(ByVal sender As Object, ByVal e As CommandEventArgs)
AnnouncementID = e.CommandArgument
Dim Conn As New
Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("sysObjDBConnectionString").ConnectionString)
Dim Cmd As New Data.SqlClient.SqlCommand("DELETE FROM
ANNOUNCEMENT WHERE announcement_id = " & AnnouncementID, Conn)
Conn.open()
Cmd.ExecuteNonQuery()
Conn.Close()
Call showAnnouncements()
End Sub
Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnAdd.Click
Dim Conn As New
Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("sysObjDBConnectionString").ConnectionString)
Dim Cmd As New Data.SqlClient.SqlCommand("SELECT ISDATE('" &
txtDate.Text & "')", Conn)
Dim DateRead As Data.SqlClient.SqlDataReader
Conn.open()
DateRead = Cmd.ExecuteReader
DateRead.Read()
If DateRead(0) Then
'Dim strAnnouncement As String
'strAnnouncement = txtAnnouncement.Text
'Encode(strAnnouncement)
DateRead.Close()
Cmd.CommandText = "INSERT ANNOUNCEMENT(announcement_title,
announcement_text, announcement_dt, announcement_active) VALUES('" &
txtTitle.Text & "', '" & txtAnnouncement.Text & "', '" & txtDate.Text &
"', " & IIf(chkActive.Checked, 1, 0) & ")"
Cmd.ExecuteNonQuery()
txtTitle.Text = ""
txtAnnouncement.Text = ""
txtDate.Text = ""
chkActive.Checked = False
Call showAnnouncements()
Else
DateRead.Close()
End If
Conn.Close()
End Sub
Sub Encode(ByRef strString As String)
strString.Replace("<", "<")
strString.Replace(">", ">")
End Sub
Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnSubmit.Click
Dim Conn As New
Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("sysObjDBConnectionString").ConnectionString)
Dim Cmd As New Data.SqlClient.SqlCommand("SELECT ISDATE('" &
txtDateEdit.Text & "')", Conn)
Dim dReader As Data.SqlClient.SqlDataReader
Conn.Open()
dReader = Cmd.ExecuteReader
dReader.Read()
If dReader(0) = 1 Then
dReader.Close()
Cmd.CommandText = "UPDATE ANNOUNCEMENT SET
announcement_title='" & txtTitleEdit.Text & "', announcement_text='" &
txtAnnouncementEdit.Text & "', announcement_dt='" & txtDateEdit.Text & "',
announcement_active=" & IIf(chkActiveEdit.Checked, 1, 0) & " WHERE
announcement_id=" & btnSubmit.CommandArgument
Cmd.ExecuteNonQuery()
txtTitleEdit.Text = ""
txtAnnouncementEdit.Text = ""
txtDateEdit.Text = ""
chkActiveEdit.Checked = False
MultiView1.ActiveViewIndex -= 1
Call showAnnouncements()
Else
dReader.Close()
End If
Conn.Close()
End Sub
Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnCancel.Click
MultiView1.ActiveViewIndex -= 1
Call showAnnouncements()
End Sub
Protected Sub EditView_Activate(ByVal sender As Object, ByVal e As
System.EventArgs) Handles EditView.Activate
Dim Conn As New
Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("sysObjDBConnectionString").ConnectionString)
Dim Cmd As New Data.SqlClient.SqlCommand("SELECT
announcement_title, announcement_text, announcement_dt, announcement_active FROM
ANNOUNCEMENT WHERE announcement_id = " & AnnouncementID, Conn)
Dim aReader As Data.SqlClient.SqlDataReader
Conn.Open()
aReader = Cmd.ExecuteReader
aReader.Read()
btnSubmit.CommandArgument = AnnouncementID
txtTitleEdit.Text = aReader("announcement_title")
txtAnnouncementEdit.Text = aReader("announcement_text")
txtDateEdit.Text = aReader("announcement_dt")
chkActiveEdit.Checked = aReader("announcement_active")
Conn.Close()
End Sub
Protected Sub Page_LoadComplete(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.LoadComplete
End Sub
End Class