I am having a problem validating the edit template of a DetailsView. The password and answer fields don't validate. The question field validates but the form still submits. I have attached the code below:
<asp:DetailsViewID="DetailsView1"runat="server"AutoGenerateRows="False"DataSourceID="ObjectDataSource1"BorderStyle="None"BorderWidth="0px"CellPadding="2"CellSpacing="1"GridLines="None">
<Fields>
<asp:TemplateFieldHeaderText="User Name:"SortExpression="UserName">
<EditItemTemplate>
<asp:LabelID="lblEditUserName"runat="server"Text='<%# Eval("UserName") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:LabelID="lblUserName"runat="server"Text='<%# Bind("UserName") %>'></asp:Label>
</ItemTemplate>
<HeaderStyleHorizontalAlign="Right"/>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="Password:"SortExpression="Password">
<EditItemTemplate>
<asp:TextBoxID="Password"runat="server"Text='<%# Bind("Password") %>'TextMode="Password"CssClass="textbox"></asp:TextBox>
<asp:RequiredFieldValidatorID="RequiredPassword"runat="server"ControlToValidate="Password"ErrorMessage="Password is required."Display="Dynamic"ValidationGroup="SecurityQuestion">*</asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:LabelID="lblPassword"runat="server"Text='<%# Bind("Password") %>'></asp:Label>
</ItemTemplate>
<HeaderStyleHorizontalAlign="Right"/>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="Security Question:"SortExpression="Question">
<EditItemTemplate>
<asp:TextBoxID="Question"runat="server"Text='<%# Bind("Question") %>'CssClass="textbox"></asp:TextBox>
<asp:RequiredFieldValidatorID="RequiredSecurityQuestion"runat="server"ControlToValidate="Question"ErrorMessage="Security Question is required."Display="Dynamic"ValidationGroup="SecurityQuestion">*</asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:LabelID="lblQuestion"runat="server"Text='<%# Bind("Question") %>'></asp:Label>
</ItemTemplate>
<HeaderStyleHorizontalAlign="Right"/>
</asp:TemplateField>
<asp:TemplateFieldHeaderText="Security Answer:"SortExpression="Answer">
<EditItemTemplate>
<asp:TextBoxID="Answer"runat="server"Text='<%# Bind("Answer") %>'CssClass="textbox"></asp:TextBox>
<asp:RequiredFieldValidatorID="RequiredSecurityAnswer"runat="server"ControlToValidate="Answer"ErrorMessage="Security Question is required."Display="Dynamic"ValidationGroup="SecurityQuestion">*</asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemTemplate>
<asp:LabelID="lblAnswer"runat="server"Text='<%# Bind("Answer") %>'></asp:Label>
</ItemTemplate>
<HeaderStyleHorizontalAlign="Right"/>
</asp:TemplateField>
<asp:TemplateFieldShowHeader="False"HeaderText="Buttons">
<EditItemTemplate>
<asp:ValidationSummaryID="validationSummary"runat="server"DisplayMode="List"ValidationGroup="SecurityQuestion"/>
<asp:ImageButtonID="btnUpdate"runat="server"CommandName="Update"SkinID="save"/>
<asp:ImageButtonID="btnCancel"runat="server"CausesValidation="False"CommandName="Cancel"SkinID="cancel"/>
</EditItemTemplate>
<ItemTemplate>
<asp:ImageButtonID="btnEdit"runat="server"CausesValidation="False"CommandName="Edit"SkinID="edit"/>
</ItemTemplate>
<ItemStyleHorizontalAlign="Right"/>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
Hi Victor,
The problem you are having above is because you have a validationgroup property set on the validation controls for the password and answer fields called "SecurityQuestion" -- yet the "btn_Update" button control doesn't have this set. As such, when it is pushed it only fires the default validationgroup - which bypasses the ones you've set.
You should either remove the validationgroup attribute from the validation controls, or add it to the btn_update control. They will then be in sync and validate before causing a post-back.
Hope this helps,
Scott
Yes, adding the validationgroup to the btn_update worked perfectly. Thank you.
No comments:
Post a Comment