Enable/Disable Required field validator from cs page? - c#

I have two TextBox and two Buttons in my page.
One is hidden and the other one is displayed.
When I click the Button1, it will save data of the two TextBox and will validate each TextBox by the RequiredFieldValidator.
Then when I click Button2, it will just hide itself (Button2) and will show the hidden TextBox.
Both TextBox has RequiredFieldValidator validating against Button1's Event click.
Now my issue is when I simply enter text to the 1st TextBox and click save, the button click is validating the required field for hidden field. I just want to validate the 2 textbox when it is showing.
How can I avoid this?

Well you can simple use the Enabled="false" property of RequiredFieldValidator.
Your markup would look something like this based on your Question.
<asp:TextBox runat="server" ID="tb1"></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="rfv1" ControlToValidate="tb1" ErrorMessage="*" ValidationGroup="gvSave">
</asp:RequiredFieldValidator>
<asp:TextBox runat="server" ID="tb2" Visible="false"></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="rfv2" ControlToValidate="tb2" ErrorMessage="*" Enabled="false" ValidationGroup="gvSave">
</asp:RequiredFieldValidator>
<asp:Button runat="server" ID="btn1" Text="Save" onclick="btn1_Click" ValidationGroup="gvSave"/>
<asp:Button runat="server" ID="btn2" Text="Show" onclick="btn2_Click" />
And your codebehind like this:
protected void btn2_Click(object sender, EventArgs e)
{
tb2.Visible = true;
rfv2.Enabled = true; // Enables the second requiredfieldvalidator
}
protected void btn1_Click(object sender, EventArgs e)
{
// your Saving code here
}

use the ValidationGroup="group" property to button and assign validation group to text on which you want to validate.
Hope it will help

You can specify CausesValidation="false" for the secondary button, this is less verbose and potentially confusing when validation groups are A) excessive for a single field and B) you have to maintain validation groups when adding further controls (do we put it on the button, the validator, the field and the validation summary? It's not a lot the remember the standard, but less practical when editing.

This is Aspx :
<td align="right">
Cut Type :
</td>
<td class="required">
<telerik:RadComboBox ID="cmbCutType" runat="server" MaxHeight="200px" Width="200px"
Filter="Contains" EnableLoadOnDemand="true" EmptyMessage="Select Cut Type" OnSelectedIndexChanged="cmbCutType_SelectedIndexChanged"
AutoPostBack="true">
</telerik:RadComboBox>
<asp:RequiredFieldValidator runat="server" ID="rfvCutType" Display="None" ControlToValidate="cmbCutType" InitialValue=""
ValidationGroup="Save" ErrorMessage="Cut Type is Mandatory"
ForeColor="Red"></asp:RequiredFieldValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="vceCutType" TargetControlID="rfvCutType"
runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
</td>
This is code behind :
protected void btn2_Click(object sender, EventArgs e)
{
rfvCutType.IsValid = false;
}
try this.......

If you wish you use backend validation then check this out, it worked for me.
Requiredfieldvalidator.Enabled = False
Requiredfieldvalidator is an ID.
The project I am working has all the fields visible but based on certain conditions, validation has to be disabled.

Related

How can I tell if ValidationSummary is triggered from code behind?

If ValidationSummary is triggered after postback, I would like to change the title of the page to say, "Error, the form is missing information to proceed". I figured out how to change the title of the page, but don't know how to determine if validation is present or not from code behind. I'm not looking to see the ValidationSummary is valid, just interested if it's showing or not.
I'm presuming you have more than one input field with a required validator, and you want the ValidationSummary control to display a single, generic error message? Your questions is confusing; if the validation message is valid or not, can be plainly seen in the page?
Just set the HeaderText property to display the message you want and set the other controls as follows:
<asp:ValidationSummary ID="testValSummary" HeaderText="Oops" runat="server" />
<p>
<asp:TextBox ID="nameBox" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="nameReqVal" ControlToValidate="nameBox"
Display="None" runat="server"></asp:RequiredFieldValidator>
</p>
<p>
<asp:TextBox ID="nameBox2" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="nameReqVal2" ControlToValidate="nameBox2"
Display="None" runat="server"></asp:RequiredFieldValidator>
</p>
<p>
<asp:Button ID="formButton" Text="Submit" runat="server" />
</p>
Code-Behind:
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsValid)
{
// Perform your logic here...
}
}

Asp textbox clear on click

I have some ASP textboxes I want to fill out.
<div class="form-group">
<asp:Label CssClass="form-control-label" ID="LFirstName" Text="First Name"
AssociatedControlID="TBFirstName" runat="server"></asp:Label>
<asp:TextBox CssClass="form-control" ID="TBFirstName"
runat="server" MaxLength="50"></asp:TextBox>
<asp:Label CssClass="form-control-label" ID="LLastName" Text="Last Name"
AssociatedControlID="TBLastName" runat="server"></asp:Label>
<asp:TextBox CssClass="form-control" ID="TBLastName"
runat="server" MaxLength="50"></asp:TextBox>
...
</div>
When a button is pushed...
<asp:Button ID="BTN_UserSubmit" runat="server"
Text="Submit" OnClick="Click_UserSubmit"/>
I have some magical things I want to do with them
protected void Click_UserSubmit(object sender, EventArgs e)
{
Log("TBFistName" + TBFirstName.Text);
Log("TBLastName" + TBLastName.Text);
...
Unfortunately, my log shows nothing but empty strings:
TBFistName
TBLastName
Why does this happen, and how can I keep the values long enough to do anything with them?
You are probably initialising/clearing the values in Page_Load.
Whenever you postback, either by a button click or some other means, the Page_Load method will be called before the click event.
So you need to put any initialisation logic inside:
if (!Page.IsPostback)
{
...
}

Validation Group in Asp.Net MultiView

I have multiView and Validation group in my code. According to my code when user press button all the data in views needs to be saved.
<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">
<asp:View ID="viewGegevens" runat="server">
<asp:TextBox ID="txtCompanyname" MaxLength="100" runat="server" CssClass=""></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator9" runat="server" ToolTip="Bedrijfsnaam vereist!"
Display="Dynamic" ErrorMessage="*" ValidationGroup="Save" ControlToValidate="txtCompanyname"
CssClass="required-asterics"></asp:RequiredFieldValidator>
<div>
<asp:LinkButton ID="btnSave1" Text="Opslaan" runat="server" CssClass="btn-ctrl right" OnClick="txtSave1_Click" ValidationGroup="Save">Save
</asp:LinkButton>
<asp:LinkButton ID="btnCancel1" Text="Annuleren" runat="server" CssClass="btn-ctrl right" OnClick="txtCancel1_Click"> Cancel
</asp:LinkButton>
</div>
</asp:View>
<asp:View ID="viewGegevens2" runat="server">
<asp:TextBox ID="txtBillingPostalCode" runat="server" CssClass="" MaxLength="100"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ToolTip="Postcode vereist!"
ErrorMessage="*" ValidationGroup="Save" ControlToValidate="txtBillingPostalCode"
Display="Dynamic" CssClass="required-asterics"></asp:RequiredFieldValidator>
<div>
<asp:LinkButton ID="btnSave2" Text="Opslaan" runat="server" CssClass="btn-ctrl right" OnClick="txtSave2_Click" ValidationGroup="Save">Save
</asp:LinkButton>
<asp:LinkButton ID="txtCancel2" Text="Annuleren" runat="server" CssClass="btn-ctrl right" OnClick="txtCancel2_Click"> Cancel
</asp:LinkButton>
</div>
</asp:View>
</asp:MultiView>
My problem is i need to fire required field validation in both tabs either user press btnSave1 or btnSave2.
But now if i press btnSave1 it only fires validations in 1st tab only. How can i solve this?
Found a workaround for this that works in my case. I made the different views validate when the tabs are clicked in the code behind preventing the user from leaving the view without validating.
protected void Tab3_Click(object sender, EventArgs e)
{
Page.Validate("YourValidationGroup");
if (Page.IsValid)
{
Tab1.CssClass = "Initial";
Tab2.CssClass = "Initial";
Tab3.CssClass = "Clicked";
MainView.ActiveViewIndex = 2;
}
}
I know this in an old thread but figured I'd throw it out there for future people experiencing a similar issue.
The answer is no, you can't do it like this out of the box.
ASP.NET Multiview is designed to display and validate one view at a time. So only the active view's html is delivered to the client's browser.
There is a workaround but may give you problems if you are using MultiView's ActiveViewChanged event.
Another option would be to refactor your page and use two divs, one for each step, making one or the other visible when changing from first to second step, and validate entire page once in the last step. This will require you to do more work with javascript.
Try this:
SelectView(0);
Validate();
if (IsValid)
{
SelectView(1);
Validate();
if (IsValid)
{
SelectView(2);
Validate();
if (IsValid)
{
SelectView(3);
Validate();
if (IsValid)
{
UpdateHeader();
Response.Redirect("FinConfLanding.aspx");
}
}
}
}

Required Field Validator always shows the error message

I have this code:
<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rvFirstName" runat="server"
ErrorMessage="Enter First Name"
ForeColor="Red" ControlToValidate="txtFirstName"
SetFocusOnError="True"></asp:RequiredFieldValidator>
The problem is that the error message shows every time the page loads not only after the submit button has been clicked. I want it to show it only if the user tries click the "Next"(submit) button (how it should work).
If this is relevant: The code above is placed in a UserControl which is included in another UserControl(the "Next" button is here) which is then included in a View of a MultiView.
Any ideas
use causeValidation to false on other buttons.
and display to dynamic.
Display="Dynamic" on require filed validator
<asp:RequiredFieldValidator ID="rvFirstName" runat="server" Display="Dynamic"
ErrorMessage="Enter First Name" ForeColor="Red"
ControlToValidate="txtFirstName" SetFocusOnError="True">
</asp:RequiredFieldValidator>
The best way is set ValidationGroup on Button and RequiredFieldValidator.
please take a look on references below, is it you have something like Page.Isvalid in your page?
References : Required Field Validator, displaying on initial page load
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
ShowMessageBox="True" DisplayMode="BulletList"
HeaderText="Validation issues" ShowSummary="False" ValidationGroup="Validation"/>
<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rvFirstName" runat="server" ErrorMessage="Enter First Name" ForeColor="Red" ControlToValidate="txtFirstName" SetFocusOnError="True" ValidationGroup="Validation"></asp:RequiredFieldValidator>
Add the above code and modify your Required Field Validator
Set 'ValidationGroup' for RequiredFieldValidator and the Next button
Remove the SetFocusOnError="True" and add display="Dynamic" instead of SetFocusOnError="True" in your requiredfieldvalidation and set casevalidtion="false" in your page.
01.If you want to display message in page load. protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Page.Validate();
}
}
Display="Dynamic"

Custom Validator firing but it does not update the ValidationSummary

Hi I am working on a custom form field validator, it seems like the custom validator is working by not allowing it to continue to the next page, but it doesn't update the Validation Summary nor does it display the asterisk and the labels that i've made visable. I also have other validators like RequiredFieldValidator on the same field. My ValidationGroup is set, as is the Text and IsValid. I even wrote and set a dummy client side validation method in javascript as some workarounds suggests.
here is the validation summary code in asp.net
<asp:ValidationSummary ID="ValidatorSummary" runat="server" ValidationGroup="Step2" />
here is the custom validator and the required field one
<asp:CustomValidator ID="AddressVerification" runat="server" ErrorMessage="Please enter a valid address." Display="Dynamic" ValidationGroup="Step2" OnServerValidate="AddressVerification_ServerValidate" ClientValidationFunction="CustomValidatorDummy" Text="*" Enabled="true" EnableClientScript="true"></asp:CustomValidator>
<asp:RequiredFieldValidator ID="RFValidatorHomeAddress" runat="server" ErrorMessage="Please enter home address." Text="*" Display="Dynamic" ValidationGroup="Step2" ControlToValidate="txtHomeAddress"></asp:RequiredFieldValidator>
here is the custom validation method in the code behind
protected void AddressVerification_ServerValidate(object sender, ServerValidateEventArgs e)
{
//lets just say it doesn't validate and sets the IsValid to false
lblUspsValidatorResHomeCity.Visible = true;
lblUspsValidatorResHomeState.Visible = true;
lblUspsValidatorResHomeZip.Visible = true;
e.IsValid = false;
}
please advise, thanks.
EDIT:
Answered - as bitxwise mentioned. the validation summary should be placed inside an update panel as well. Thanks!
Like so:
<asp:UpdatePanel ID="UpdatePanelValidationSummaryHome" ChildrenAsTriggers="false" UpdateMode="Conditional"
runat="server">
<ContentTemplate>
<asp:ValidationSummary ID="AddressHomeValidationSummary" runat="server" ValidationGroup="AddressHomeValidationGroup"
CssClass="errors" />
</ContentTemplate>
and then calling the update:
UpdatePanelValidationSummaryHome.Update();
You seem to be missing ControlToValidate in your declaration of CustomValidator.
EDIT
If your CustomValidator aggregates multiple controls, then try this:
ASPX
<asp:TextBox ID="txtMyTextBox" runat="server" />
<asp:CustomValidator ID="AddressVerification" runat="server"
Display="Dynamic"
ErrorMessage="Please enter a valid address."
OnServerValidate="AddressVerification_ServerValidate"
Text="*"
ValidationGroup="Step2" />
<asp:RequiredFieldValidator ID="rfvAddress" runat="server"
ControlToValidate="txtMyTextBox"
Display="Dynamic"
ErrorMessage="Please enter an address"
Text="*"
ValidationGroup="Step2" />
...
<asp:ValidationSummary ID="ValidatorSummary" runat="server"
ValidationGroup="Step2" />
...
<asp:Button ID="btnCheckAddresses" runat="server"
CausesValidation="true"
Text="Check Addresses"
ValidationGroup="Step2" />
CS
protected void AddressVerification_ServerValidate(object source, ServerValidateEventArgs args) {
args.IsValid = !string.IsNullOrEmpty(txtMyTextBox.Text) && !txtMyTextBox.Text.Contains(' ');
}
Note that the validation group of the control invoking the post back has CausesValidation="true" and has the same ValidationGroup as the validators.
EDIT 2
If your postback control was in the UpdatePanel but the ValidationSummary was not, then the partial postback would not have refreshed the ValidationSummary. Once you removed the postback control from the UpdatePanel, I imagine it would then generate a full postback, which would refresh your ValidationSummary.
I don't know what else is in your UpdatePanel, but many people report having issues with their validators being in UpdatePanel's.
Check out MSDN,
When you use the ValidationSummary
control inside an UpdatePanel control,
make sure that the validator control
and the control it is associated with
are in the same panel. For more
information about using the
UpdatePanel control for partial-page
updates, see Partial-Page Rendering
Overview.
as well as this MSDN blog.
Make sure every control (textbox, checkbox, etc) that is being validated, every RequiredValidator, CustomValidator and ValidationSummary has the same ValidationGroup value.
ie.
<asp:CustomValidator ID="CustomValidator6" runat="server" ErrorMessage="The field is required"
ValidationGroup="myValGroup">*</asp:CustomValidator>
Of course this will only work if all the controls are inside the same panel or parent control.
In my case the validation summary was not showing because the submit button was in a separate update panel.
<Triggers>
<asp:PostBackTrigger ControlID="ButtonSubmit" />
</Triggers>
Once I added the above code the summary appeared.

Categories

Resources