I am having the same problem as someone else in this forum. My validation control is not firing...and not sure where I have gone wrong. Could someone please take a look and let me know what obvious error I have here...thanks
I have set up a customer validator in my aspx page using the following:
<asp:TextBox ID="EmployeeNumber2TextBox" runat="server"
Text='<%# Bind("EmployeeNumber") %>'Visible='<%# AllowEmployeeNumberEdit() %>' />
<asp:CustomValidator ID="ValidateEmpNumber" runat="server"
onservervalidate="ValidateEmpNumber_ServerValidate"
controltovalidate="EmployeeNumber2TextBox"
ErrorMessage="You Must Enter an Employee Number" Text="*" />
and the code behind:
protected void ValidateEmpNumber_ServerValidate(object sender, System.Web.UI.WebControls.ServerValidateEventArgs e)
{
int SiteCompanyID = System.Convert.ToInt32(Session["SiteCompanyID"]);
SiteCompanyBLL SiteCompany = new SiteCompanyBLL();
SiteCompanyDAL.SiteCompanyRow ScRow = SiteCompany.GetCompanyByID(SiteCompanyID);
bool AutoGenerate = ScRow.AutoGenNumber; // result returning true or false
if (AutoGenerate == false)
{
if (e.Value.Length == 0)
e.IsValid = false;
else
e.IsValid = false;
}
}
Is the validator in sync with the control that is doing the submit/postback? Also, there is no condition that allows it to be true.
How do you know it isn't firing?
Did you try making the OnServerValidate and ControlToValidate with the first letter of each word uppercase? Those properties may be case sensitive.
I was able to run a cutdown version of your code on my system.
Are you sure your Web.config is set to compile debug?:
<compilation debug="true">
Related
In My Application server side validation function is not working.even function is not called. i have put debugger on thuat function but it is not stopped ny debugger .i.e. function is not called
<asp:TextBox type="text" ID="txtMobilePhone" runat="server" ClientIDMode="Static" CausesValidation="true"/>
<asp:CustomValidator ID="cvMobilePhone" runat="server" OnServerValidate="cvMobilePhone_ServerValidate"
Text="Mobile Phone already exist in this Reward Program." ErrorMessage="Mobile Phone already exist in this Reward Program."
Display="Dynamic" ValidationGroup="vgStep2" ControlToValidate="txtMobilePhone" CssClass="error"></asp:CustomValidator>
<asp:RequiredFieldValidator ID="rfvMobilePhone" runat="server" ControlToValidate="txtMobilePhone"
ErrorMessage="Mobile Phone is required." CssClass="error" ValidationGroup="vgStep2"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="cvMobilePerVal" runat="server" ClientValidationFunction="validateEmailOrMobilePerVal"
Display="Dynamic" ValidationGroup="vgStep2"></asp:CustomValidator>
<asp:Button ID="btnStep2Upper" runat="server" ClientIDMode="Static" OnClick="btnSaveContactClick" Text="Save" ValidationGroup="vgStep2" vg="vgStep2" OnClientClick="return ClientValidate();" />
Server Side Code
protected void cvMobilePhone_ServerValidate(object source, ServerValidateEventArgs value)
{ /* I have put debugger here but control is not coming here*/
/* my validation logic*/
protected void cvMobilePhone_ServerValidate(object source, ServerValidateEventArgs value)
{
if (txtMobilePhone.Text.Trim() != "")
{
RewardProgramDataContext db = new RewardProgramDataContext();
Boolean f = false;
string MobilePhone = cmnFunc.RemoveMobilePhoneFormat(txtMobilePhone.Text.Trim());
if (Request["id"] != null)
{
var cData = db.spContactSelectAllSingle(new Guid(Request["id"])).SingleOrDefault();
if (cData != null)
{
if (cmnFunc.RemoveMobilePhoneFormat(cData.MobilePhone) == MobilePhone)
{
f = true;
value.IsValid = true;
}
}
}
if (f == false)
{
var res = db.spContactDuplicateMobile(new Guid(ddlContactList.SelectedValue), MobilePhone).SingleOrDefault();
if (res.Column1 <= 0)
{
value.IsValid = true;
customIsValid = true;
}
else
{
value.IsValid = false;
customIsValid = false;
}
}
}
}
now when i click submit button all clent side validation working but serside custom validator is not calling
You forget to set the ControlToValidate property?
<asp:CustomValidator ID="cvMobilePhone" runat="server" ControlToValidate="txtMobilePhone" OnServerValidate="cvMobilePhone_ServerValidate"
Text="Mobile Phone already exist in this Reward Program." ErrorMessage="Mobile Phone already exist in this Reward Program."
Display="Dynamic" ValidationGroup="vgStep2" CssClass="error"></asp:CustomValidator>
You have a combination of two different things causing this behaviour.
Firstly, note that although—as has been said by others—you do not have to specify ControlToValidate, doing so restricts the circumstances in which the server-side custom validation event will fire. Specifically, if you leave it unset, the event always fires on postback, whereas if you set it, the event only fires when the control identified by ControlToValidate has a non-empty value.
Secondly, by specifying OnClientClick, you are telling the framework that you will take care of client-side validation, which will now not fire unless you call it from your OnClientClick function. Although you have not included your ClientValidate function in your question, I suspect you are not doing so, which leaves your RequiredFieldValidator powerless to prevent the postback.
In combination, these two things mean that
the postback occurs despite the empty textbox, and
the server-side custom validation does not fire on postback, because of the empty textbox.
You can call the client validation from your custom function using Page_ClientValidate()), which will be present in your page script since the page contains validators.
function ClientValidate() {
if (Page_ClientValidate()) {
//do custom validation, maybe return false
return true;
}
else {
return false;
}
}
Just start learning and having this problem while practicing with jscript
Code:
<script type="text/jscript" language="jscript">
function MyClientFunction(sender, arguments) {
var intValue = arguments.value;
alert(arguments.value);
if (intValue % 2 == 0) {
arguments.IsValue = true;
}
else {
alert("Use Even Numbers");
}
}
</script>
<asp:textbox ID="TextBox1" runat="server"></asp:textbox>
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="CustomValidator" ClientValidationFunction="MyClientFunction();" EnableClientScript="true"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button"></asp:Button>
showing error after clicking the "button":
"...Error: Unable to get property 'value' of undefined or null reference..."
I'm not sure how the parameters are passed, not really familiar with how the jscript function works
tried this and no errors:
var intValue = document.getElementById("TextBox1").value;
alert(intValue);
Thanks a lot..
Don't pass this. You don't want to pass anything, you just want to give it the name of your function and the rest will be handled for you:
ClientValidationFunction="MyClientFunction"
Refer to the example on this page.
Also make sure you're using the correct capitalization. It should be arguments.Value and arguments.IsValid.
you have a few issues. here's a fixed version
<script>
function MyClientFunction(sender, args) {
var intValue = args.Value;
alert(args.Value);
if (intValue % 2 == 0) {
args.IsValid = true;
}
else {
args.IsValid = false;
}
}
</script>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="Use Even Numbers"
ClientValidationFunction="MyClientFunction" EnableClientScript="true"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button"></asp:Button>
list of things changed
add ControlToValidate property on the validator, set the value to
the ID of the control you want it to validate - TextBox1 in this
case
the value for ClientValidationFunction should be only the name of a
javascript function, not an actual call to it
the function takes two arguments which you have right. I couldn't
find the definition for the parameter properties. the second
parameter has Value (with a capital V) which is the textbox input
now that you have associated the controls correctly.
set IsValid true or false within the method
move the error messages to the validator attribute rather than using
an alert
additionally I changed arguments to args since the former is a default name in javascript.
You aren't passing any parameters when calling your client function.
Therefore, both of its declared parameters are undefined.
You probably want to pass this as a parameter when you call it in the inline event handler.
The reason is because JavaScript is a Case Sensitive language.
The following code should work:
<script type="text/jscript" language="jscript">
function MyClientFunction(sender, arguments) {
var intValue = arguments.Value;
alert(arguments.Value);
if (intValue % 2 == 0) {
arguments.IsValue = true;
}
else {
alert("Use Even Numbers");
}
}
</script>
The explanation is that arguments is a parameter object that has two properties as you know (Value and IsValid) and you are referencing is property "Value" with lowercase "v".
Also you need to add the property ControlToValidate to your CustomValidator:
ControlToValidate="TextBox1"
the public ClientValidationFunction property of the CustomValidator just expect a valid full name reference to your function in your case you can use just "MyClientFunction" without the function call "();". Also all ASP.net validators have a public property called ValidationGroup that is just a label very handy if you have multiple validation regions.
I have one textbox..
i want to validate it's value based on dropdownlist value..
So i am displaying message from code behind using RegularExpressionValidator..
But it is not working plz,give me suggestion..
<asp:TextBox ID="tbnooflecture" runat="server" Width="119px" Height="33px"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ForeColor="#6600FF"
runat="server" ValidationGroup="upper"
ControlToValidate="tbnooflecture"></asp:RegularExpressionValidator>
<asp:Button ID="bfillattendence" runat="server" Text="To Fill Attendence Click Here"
onclick="FillAttendence_Click" Width="218px" Height="33px" CausesValidation="true" ValidationGroup="upper"/>
i am writing below code in Button click event
string batchname = dpbatchname.SelectedItem.Text.ToString();
int lengthofbatch=batchname.Length;
if(lengthofbatch==2)
{
RegularExpressionValidator1.ValidationExpression = "[1-9][02468]|[02468]";
RegularExpressionValidator1.ErrorMessage = "Only Even No. of Attendence is Valid for Lab.";
}
else if (lengthofbatch == 1)
{
RegularExpressionValidator1.ValidationExpression = "[0-9][0-9]|[0-9]";
RegularExpressionValidator1.ErrorMessage = "Attendence Shold be Like 9,50";
}
else
{
RegularExpressionValidator1.ValidationExpression = "[0-9][0-9]|[0-9]";
RegularExpressionValidator1.ErrorMessage = "Attendence Shold be Like 9,50";
}
Are you validating Textbox value?
If you use regular expression on server side, then you need to validate input (your textbox) like
below, and display message.
if (Regex.IsMatch(text, reg))
{
}
Add this line
RequiredFieldValidator1.IsValid = false;
after
RegularExpressionValidator1.ValidationExpression = "[0-9][0-9]|[0-9]";
RegularExpressionValidator1.ErrorMessage = "Attendence Shold be Like 9,50";
I added a regex validator but its not showing anything on the page, basically the validation is done somewhere else i just needed to fire up. Here is the validator
<div>
<asp:RequiredFieldValidator
ID="RegularNoCardAccepted" runat="server"
ControlToValidate="txtCreditCardNumber"
CssClass="Error" Display="Dynamic">
</asp:RequiredFieldValidator>
</div>
And here is how I am trying to fire up, in reality i dont need it to check against a regular expression, I am just not sure how to make it pop up when it meets this condition
if (CardNotAccepted())
{
//Find the validator located somewhere in the master page.
RequiredFieldValidator reqVal =
FindControlRecursive(this.Page.Master, "RegularNoCardAccepted")
as RequiredFieldValidator;
if (reqVal != null)
{
//The code goes through here but it never shows.
reqVal.Enabled = true;
reqVal.Text = "Credit Card Type is not accepted";
reqVal.Visible = true;
reqVal.Validate();
}
return;
}
ASP.NET FieldValidators work automatically (assuming the Enabled property is set to true) on POST events. Here is an example of use: http://www.w3schools.com/aspnet/showasp.asp?filename=demo_reqfieldvalidator
I got this ASPxTextBox:
<dxe:ASPxTextBox ID="txtFirstName" runat="server">
<ClientSideEvents LostFocus="function(s, e) {
if (s.GetText() == '')
{
s.SetIsValid(false);
s.errorText = 'Please enter First Name.';
}
}"></ClientSideEvents>
<ValidationSettings ErrorDisplayMode="ImageWithTooltip">
</ValidationSettings>
</dxe:ASPxTextBox>
But the errorText displayed isn't what I have set inside the LostFocus event. Instead, the default errorText which is "Invalid value" is displayed in the tool tip.
Any ideas? Thanks
In order to accomplish this task, it is necessary to:
enable “required” validation (set the ValidationSettings.RequiredField.IsRequired property to “true”;
specify the “required” errorText (ValidationSettings.RequiredField.ErrorText);
force editor validation by setting the ValidationSettings.ValidateOnLeave property to “true”:
<dxe:ASPxTextBox ID="txtFirstName" runat="server">
<ClientSideEvents LostFocus="function(s, e) {
s.Validate();
}"></ClientSideEvents>
<ValidationSettings ErrorDisplayMode="ImageWithTooltip" ValidateOnLeave="true">
<RequiredField IsRequired="true" ErrorText="Please enter First Name." />
</ValidationSettings>
</dxe:ASPxTextBox>
I happen to solve the problem:
if (s.GetText() == '')
{
s.errorText = 'Please enter First Name.';
s.SetIsValid(false);
}
Modifying the value of errorText should come first before setting IsValid property of the ASPxTextBox to false.
(I want to laugh at my stupidness! OMG)
Thanks for those who helped. :)