I have a form with requiredfieldvalidators inside separate updatepanels, whose UpdateMode's are set to conditional. I've set timestamps in each panel to ensure that the updatemode was functioning correctly, which it is. However, it seems that a postback triggered in the first update panel still fires my validator in my 2nd update panel. I've attached code below. Your insight is much appreciated!
<%@dotnet.itags.org. Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Update Panel Test</title></head><body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <div> <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> <ContentTemplate> This is Panel 1. <div> TextBox1:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="TextBox1 isn't filled in."></asp:RequiredFieldValidator> <asp:Button ID="Button1" runat="server" Text="Button1" /><%=DateTime.Now%> </div> </ContentTemplate> </asp:UpdatePanel> <asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" runat="server"> <ContentTemplate> This is Panel 2. <div>Textbox2: <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="TextBox2" ErrorMessage="TextBox2 isn't filled in."></asp:RequiredFieldValidator> <asp:Button ID="Button2" runat="server" Text="Button2" /><%=DateTime.Now%> </div> </ContentTemplate> </asp:UpdatePanel> </div> </form></body></html>
You just need to assign the two sets of controls to different validation groups.
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ... ValidationGroup="Grp1" />
<asp:Button ID="Button1" ... ValidationGroup="Grp1" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" ... ValidationGroup="Grp2" />
<asp:Button ID="Button2" ... ValidationGroup="Grp2" />
Also, you don't need UpdatePanels to make this work.
Assign each button a different validator that will solve the issue
<%@. Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Update Panel Test</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Auto">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<ContentTemplate>
This is Panel 1.
<div>
TextBox1:<asp:TextBox ValidationGroup="panel1" ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="panel1" ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"
ErrorMessage="TextBox1 isn't filled in."></asp:RequiredFieldValidator>
<% =DateTime.Now %>
<asp:Button ID="Button1" ValidationGroup="panel1" runat="server" Text="Button1" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" runat="server">
<ContentTemplate>
This is Panel 2.
<div>
Textbox2:
<asp:TextBox ID="TextBox2" ValidationGroup="panel2" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ValidationGroup="panel2" ID="RequiredFieldValidator2" runat="server" ControlToValidate="TextBox2"
ErrorMessage="TextBox2 isn't filled in."></asp:RequiredFieldValidator>
<% =DateTime.Now %>
<asp:Button ID="Button2" ValidationGroup="panel2" runat="server" Text="Button2" />
</div>
</ContentTemplate>
</asp:UpdatePanel
</div>
</form>
</body>
</html
No comments:
Post a Comment