ASPxTextBox ErrorText Not Updated on Lost Focus - c#

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. :)

Related

Defining Label.Text leads to a NullReferenceException

I am trying to set a label to show some text when an error occurs. When I make this error occur, the label throws a NullReferenceException.
Here is the label.Text code from the code behind:
if (userEmail != null)
{
//If the same email exists
pnlError.Visible = Visible;
lblError.Text = "Error: The email you have entered is already assigned to an account.";
}
When I build, I get no errors, which would suggest to me that it is able to find it in the ASPX code.
Here it is in the markup:
<asp:Panel ID="pnlError" runat="server" Visible="false" EnableViewState="false">
<label id="lblError"></label>
</asp:Panel>
As you can see it is wrapped in a panel. I can change the visibility of the panel just fine in the same function as the Label.Text
And here it is defined in the aspx.designer.cs:
protected global::System.Web.UI.WebControls.Panel pnlError;
protected global::System.Web.UI.WebControls.Label lblError;
It is worth mentioning, that whenever I change any other WebControl elements in the markup, such as a button or panel, the aspx.design.cs regenerates, but it fails to include the lblError label. I have tried deleting and then regenerating the design manually to no avail.
Since the label is inside of a panel you need to find it:
if (userEmail != null)
{
//If the same email exists
pnlError.Visible = Visible;
var lblError= ((Label)(pnlError.FindControl("lblError")));
if(lblError != null)
{
lblError.Text = "Error: The email you have entered......";
}
}
Edit:
You better use asp control
<asp:Label ID="lblError" runat="server" ></asp:Label>
then you dont need to find it
pnlError.Visible = Visible;
lblError.Text = "Error: The email you have entered......";

ASP.NET server side validation not firing

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;
}
}

set focus on custom validator

I have 2 textbox, one for login another for password.
I have 1 custom server side validator too, if password is entered wrong, validator is fired.
What I want is to set focus on this error message.
I have tried focus(), and setfocusonerror property too. but its not working.
here is my code:
<asp:CustomValidator ID="cvLogin"
runat="server"
Display="Dynamic"
CssClass="login-req"
OnServerValidate="cvLogin_ServerValidate"
ValidationGroup="tovalidate"
SetFocusOnError="True">
</asp:CustomValidator>
protected void cvLogin_ServerValidate(object source,
ServerValidateEventArgs args)
{
if (currentUser == null)
{
args.IsValid = false;
MessageBox1.Focus();
MessageBox1.SetMessage(Resources.RSResource.Login_InvalidLogin,
Constants.MessageType.Error);
}
Try SetFocus method of Page:
if (currentUser == null)
{
args.IsValid = false;
Page.SetFocus(MessageBox1);
...
}
I am not sure. But may be you need to place your control on a Panel.
UPDATE 2:
I checked SetFocus method. It works for TextBoxes, but doesn't work for Labels or Validators. So if you want to set focus on message the best choise is using javascript:
document.getElementById('MessageBox1').scrollIntoView(true);
I also tested this server side code. It works fine:
Page.ClientScript.RegisterStartupScript(this.GetType(), "FocusScript", "document.getElementById('MessageBox1').scrollIntoView(true);", true);

Making a validator work from the back end code

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

Customer Validation ASP.Net C#

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">

Categories