I have an question here. How to disable a validation when checkbox checked. i have tried ValidatorEnable(control, false) , it can't work for me.
<dxe:BaseCheckBox runat ="server" ID="chkIsChecked" ClientInstanceName ="chkIsChecked">
<ClientSideEvents CheckedChanged="OnSelectionChanged"/>
</dxe:BaseCheckBox>
<dxe:BaseComboBox runat ="server" ID="cboLabour" ClientInstanceName ="cboLabour" ValueType="System.String" ClientEnabled="false" >
<ValidationSettings SetFocusOnError="True" ErrorText="This field is required to fill."
ErrorDisplayMode="ImageWithTooltip" ValidationGroup="RejectReason"
CausesValidation="false">
<RequiredField IsRequired="True" ErrorText="This field is required to fill.">
</RequiredField>
</ValidationSettings>
</dxe:BaseComboBox>
My Javascript:
function OnSelectionChanged(s,e)
{
if(chkIsChecked.GetValue())
{
cboLabour.SetEnabled(true);
}
else
{
cboLabour.SetEnabled(false);
cboLabour.SetValue('');
}
}
Thanks for Advice.
To do this you'll need to use custom validation. Something like this:
function OnLabouryValidation(s, e) {
if (chkIsChecked.GetValue())
return;
var v = e.value;
if(e.value)
return;
e.isValid = false;
e.errorText = "Required.";
}
There's "documentation" on custom validation here, but in my quick reading, it's not explicitly clear how to wire this up.
http://documentation.devexpress.com/#AspNet/CustomDocument11135
As i discovered from your question you are looking for the group validation:
First Set the ValidateOnLeave="False" in ValidationSettings and Specify the Validation group name to your controls and then use the client side ASPxClientEdit.ValidateGroup('MyGroup');method to validated your group of controls by doing your some customization as per your requirment.
Markup:
<dxe:BaseCheckBox runat ="server" ID="chkIsChecked" ClientInstanceName ="chkIsChecked">
<ClientSideEvents CheckedChanged="OnSelectionChanged"/>
</dxe:BaseCheckBox>
<dxe:BaseComboBox runat ="server" ID="cboLabour" ClientInstanceName ="cboLabour" ValueType="System.String" ClientEnabled="false" >
<ValidationSettings SetFocusOnError="True" ErrorText="This field is required to fill."
ErrorDisplayMode="ImageWithTooltip" ValidationGroup="RejectReason"
ValidateOnLeave="False">
<RequiredField IsRequired="True" ErrorText="This field is required to fill.">
</RequiredField>
</ValidationSettings>
</dxe:BaseComboBox>
<dx:ASPxButton ID="btn" runat="server" Text="Validate"
AutoPostBack="False" CausesValidation="False">
<ClientSideEvents Click="function(s, e) {
if (chkIsChecked.GetValue()) // if checked then validate the group
{
ASPxClientEdit.ValidateGroup('RejectReason');
}
}" />
</dx:ASPxButton>
Follow these documentation and implement whatever you are trying to do.
How to: Validate a Group of Editors
How to: Validate All Editors on a Page
How to: Implement a Custom Validation
ASPxClientEdit.Validation Event
Related
I am trying to apply CssClass when validator is false, it worked for me in the past and now I don't know why it doesn't work.
Textbox:
<asp:TextBox ID="txtPass"
AutoPostBack="false"
ClientIDMode="Static"
runat="server"
placeholder="Password (8 - 16 digits)"
CssClass="Text"
type="password"
ValidationGroup="check">
</asp:TextBox>
Validators attached to this textbox:
<asp:RegularExpressionValidator ID="revPass"
runat="server"
Display="None"
ControlToValidate="txtPass"
EnableClientScript="false"
ValidationExpression="[a-zA-Z0-9]{8,16}"
ValidationGroup="check">
</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="rfvPass"
runat="server"
EnableClientScript="false"
ControlToValidate="txtPass"
Display="None"
ValidationGroup="check">
</asp:RequiredFieldValidator>
<asp:CompareValidator ID="cvPasswords"
runat="server"
ErrorMessage="Passwords do not match!"
EnableClientScript="false"
CssClass="error"
ControlToCompare="txtPass"
ControlToValidate="txtConPass"
ValidationGroup="check">
</asp:CompareValidator>
But I have to say that only the last one works. The validators work, just not changing CssClass.
EDIT:
It is not even enteres the if statemant I checked it. there is the if statement:
if (!(revPass.IsValid) || !rfvPass.IsValid)
{
txtPass.CssClass = "txtError";
}
If you want to Apply Css on your Validator's Error messages Then you have to set CssClass Attribute of all Validators..
UPDATE :Sorry about that, i misunderstood your Question. Did you try this On Code behind
protected void Button1_OnClick(object sender, EventArgs e)
{
if (Page.IsValid)
{
// code executed when validation are valid
}
else
{
txtPass.CssClass = "Your New Class";
txtConPass.CssClass = "Your New Class";
}
}
I have a dropdown list for the employees rank (e.g. Manager, Supervisor, Member, etc.) and a text box for Manager's/Supervisor's name. By default, the text box is not required so it could be empty.
However, if the dropdown list value is a "Member", then I need to make the text box required so empty value is not allowed.
I already have the requiredfieldvalidator in placed for the text box but I don't know how to disable/enable it depending on the value in dropdown list.
<ASP:DROPDOWNLIST id="drpLstEmRank" tabIndex="2" runat="server" WIDTH="321"></ASP:DROPDOWNLIST>
<asp:RequiredFieldValidator ID="valDrpLstEmRank" runat="server" ControlToValidate="drpLstEmRank"
Display="Dynamic" EnableClientScript="False" ErrorMessage="RequiredFieldValidator"
Font-Italic="True" Font-Names="Verdana" Font-Size="8pt" InitialValue="(Select Rank)">Please select a rank</asp:RequiredFieldValidator></TD>
<asp:RequiredFieldValidator ID="valTbHeadName" runat="server" ControlToValidate="tbHeadName"
Display="Dynamic" EnableClientScript="False" ErrorMessage="RequiredFieldValidator"
Font-Italic="True" Font-Names="Verdana" Font-Size="8pt">Please input a head's name</asp:RequiredFieldValidator>
<ASP:TEXTBOX id="tbHeadName" runat="server" WIDTH="415" HEIGHT="26" MaxLength="50"></ASP:TEXTBOX>
You can disable/enable the validator on the server side code in the Page_Load event as follows.
protected void Page_Load(object sender, EventArgs e)
{
valTbHeadName.Enabled = Request[drpLstEmRank.UniqueID] == "Member" ? true : false;
}
But dont forget to add the AutoPostBack="true" property to your dropdown list for the employees rank. Otherwise it wont work after changing the dropdownlist value.
Here is Client Side Solution
$("document").ready(function(){
$("drpLstEmRank").change(function(){
if(this.val() == "Member"){
EnableValidator("#valTbHeadName");
}
else{
DisableValidator("#valTbHeadName");
}
});
});
//Method to disable the validator
function DisableValidator(validatorId) {
var validator = $(validatorId);
ValidatorEnable(validator[0], false);
}
//Method to enable the validator
function EnableValidator(validatorId) {
var validator = $(validatorId);
ValidatorEnable(validator[0], true);
validator.hide(); //hides the error message
}
I have some asp code written for a form. One of the fields must have 3 types of validation, 2 of which are alway enabled, the other 2 must be "enabled" only if a peculiar value has been selected from a dropdownlist.
How am I supposed to achieve this task?
I have disabled the 2 extra validations by defaults and wold like to reactivate on dropdownlist specific selection.
I show you my code here.
ASP.NET code:
<tr>
<td class="style1">
<asp:Label ID="LabelPiva" runat="server" Text="Partita IVA" meta:resourcekey="LabelPiva" Font-Bold="True" />
</td>
<td>
<asp:TextBox ID="pivaTextBox" runat="server" Text='<%# Bind("piva") %>'
MaxLength="50" Width="400px" />
<asp:RequiredFieldValidator ID="RequiredPiva" runat="server"
ControlToValidate="pivaTextBox"
ErrorMessage="<%$ Resources:Resource, CampoObbligatorio %>" Display="Dynamic"
CssClass="little_text" />
<asp:CustomValidator ID="PivaEsistente" runat="server"
ErrorMessage="Partita IVA esistente nel database" meta:resourcekey="PivaEsistente"
ControlToValidate="pivaTextBox" CssClass="little_text" Display="Dynamic"
onservervalidate="PIVAEsistente_ServerValidate"></asp:CustomValidator>
<asp:RegularExpressionValidator ID="PivaSize" runat="server"
ControlToValidate="pivaTextBox" CssClass="little_text" Display="Dynamic"
ErrorMessage="Controllare la lunghezza della partita iva. 11 caratteri e solo numeri."
ValidationExpression="^[0-9]{11}$" Enabled="False" ValidationGroup="soloItalia">
</asp:RegularExpressionValidator>
<asp:CustomValidator ID="PivaErrata" runat="server"
ErrorMessage="Partita IVA non corretta. Controllare le cifre." meta:resourcekey="PivaErrata"
ControlToValidate="pivaTextBox" CssClass="little_text" Display="Dynamic"
onservervalidate="ValidatePI" Enabled="False" ValidationGroup="soloItalia"></asp:CustomValidator>
</td>
</tr>
The CustomValidator with id PivaErrata and the RegularExpressionValidator with id PivaSize must be fired only when dropdownlist hits the "it" value.
This is the code-behind in c# to intercept the value of the dropdownlist:
protected void nazioneDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)sender;
DropDownList ddlProv = (DropDownList)FormUser.FindControl("provinciaDropDownList");
if ("it".Equals(ddl.SelectedValue))
{
ddlProv.Enabled = true;
}
else
{
ddlProv.SelectedIndex = 0;
ddlProv.Enabled = false;
}
}
As you can see, another dropdownlist gets enabled when that specific value "it" is fired in the nations dropdownlist.
I would like to activate the validations controls too.
I assigned a validationgroup to those 2 validations, but I am not sure how to "enable" them at once.
Any help?
Thank you very much.
you can use Enabled property of the Validation controls to enable or disable them.
Try This:
if (ddl.SelectedItem.ToString().Equals("it"))
{
ddlProv.Enabled = true;
//add these two statements to enable
PivaSize.Enabled=true;
PivaErrata.Enabled=true;
}
else
{
ddlProv.SelectedIndex = 0;
ddlProv.Enabled = false;
//add these two statements to disable
PivaSize.Enabled=false;
PivaErrata.Enabled=false;
}
First of all what I want to do is to pre select a value in my RadComboBox ,and if this value is not selected something else is selected then change the visibility to of some specific fields hidden.
My problem is that I'm able to make my pre select but somehow I can not change the status of my visibility for my specific fields when this pre selected value has changed.
What I have tired is to do it with a standard event OnSelectedIndexChanged but some how this is not triggering why so ever.. I have also added AutoPostBack=true as well as ViewStateMode=Enabled"
First my field's
Here comes my preslect as well here I would like to trigger the visibility change
<div class="formRowDiv">
<asp:Label ID="Activitylbl" runat="server" Text="Activity" CssClass="formLabel" />
<telerik:RadComboBox ID="rcbActivity" CssClass="rowForm" ViewStateMode="Enabled" runat="server" Width="260px" EmptyMessage="- Activity -"
DataTextField="ActivityId" DataValueField="ActivityId" AutoPostBack="true" OnSelectedIndexChanged="rcbActivity_SelectedIndexChanged">
</telerik:RadComboBox>
<asp:RequiredFieldValidator runat="server" Display="Dynamic" ControlToValidate="rcbActivity"
ErrorMessage="Can not be empty" CssClass="rowFormValidation" />
</div>
What I want to hide:
<div class="formRowDiv">
<asp:Label ID="ActivityDescription" runat="server" Text="ActivityDescription" CssClass="formLabel" Visible="false"/>
<telerik:RadTextBox runat="server" ID="rtbActivityDescription" Wrap="true" Height="50" TextMode="MultiLine" AutoPostBack="true" CssClass="rowForm" ReadOnly="true" Visible="false" />
</div>
How I do my pre selection :
In my databind method that is called in my Page_Load
I firrst loop and then do a pre select
foreach (Activity item in ctx.Activity.OrderBy(l =>l.Code))
{
rcbActivity.Items.Add(new RadComboBoxItem(item.FullActivity, item.ActivityId.ToString()));
if (rcbActivity.Items.FindItemByValue("4") != null)
{
rcbActivity.SelectedIndex = rcbActivity.Items.IndexOf(rcbActivity.Items.FindItemByValue("4"));
ActivityDescription.Visible = true;
rtbActivityDescription.Visible = true;
rtbActivityDescription.ReadOnly = false;
}
}
Here is how I would hide my Fields
protected void rcbActivity_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
ActivityDescription.Visible = true;
rtbActivityDescription.Visible = true;
rtbActivityDescription.ReadOnly = false;
}
In case your controls are in an update panel then try removing it if the update panel is not so important and see if the changes u make to the controls in the server side are getting affected properly
I am using below .aspx code to validate textbox..this is working perfectly
<asp:TextBox ID="tbnooflecture" runat="server" Width="113px" Height="33px">
</asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
ForeColor="#6600FF" runat="server"
ErrorMessage="Total Attendence Should be Like 3 or 50"
ValidationGroup="upper" Display="Dynamic"
ControlToValidate="tbnooflecture"
ValidationExpression="[0-9][0-9]|[0-9]">*
</asp:RegularExpressionValidator>
What I want that above this textbox there is dropdownlist named batchname and if length of batchname is 2, I want to put validation that Attendence should be even no.
I have used below code on button click
if (lenghth == 2)
{
if (!System.Text.RegularExpressions.Regex.IsMatch(name, "[1-9][02468]"))
{
Label5.Text = "Only Even Entry for Labs";
Label5.Visible = true;
}
}
I want to do it on client-side. How can I do it in C#?
You need to use custom-validation control of asp.net.
Few useful links
https://web.archive.org/web/20211020145934/https://www.4guysfromrolla.com/articles/073102-1.aspx
http://msdn.microsoft.com/en-us/library/f5db6z8k%28v=vs.71%29.aspx
http://www.w3schools.com/aspnet/control_customvalidator.asp
Custom validator error text through javascript?
That is server side validation #user2053138, you mentioned in comment.
Check out the following example:
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
ClientValidationFunction="ClientValidate"
OnServerValidate="ServerValidation"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Name="verdana"
Font-Size="10pt"
runat="server"/>
<script language="javascript">
function ClientValidate(source, arguments)
{
if (arguments.Value % 2 == 0 ){
arguments.IsValid = true;
} else {
arguments.IsValid = false;
}
}
</script>