C# web application event handling - c#

Which type of event would i place on a textbox to cause an action on the web form when the cursor leaves that textbox ?and how can i implement this?
I actually want to display a message on the form after details have been entered in the last textbox to notify users if they have left any field blank. I hope to apply this on the last textbox on the form.
I know an event handler shoud be able to instantiate this but am not sure which event would do this and how to implement it....
all advices are warmly welcome..
Thank you..

I think you are probably going to want to look at the ASP.NET validation controls. They should be able to handle what you are wanting to do.
http://devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=46
http://msdn.microsoft.com/en-us/library/aa479045.aspx

You'll need to use javascript on the client to handle this. What you want to do is add a handler for the blur event. The blur event occurs when an element loses focus. Use this in conjunction with your client-side validation logic to trigger validation when the field loses focus.
I prefer adding my javascript unobtrusively. Below is an example of how you would do it using jQuery and the jQuery validation plugin. Using it with standard ASP.NET validators would work as well, just replace the call to the validation logic with that for your client-side validators, i.e., call Page_ClientValidate().
<script type="text/javscript">
$('form').validate(); // set up validation
$('#lastTextBoxID').blur( function() {
$('form').valid(); // validate when the blur event happens
});
</script>

You can put the textbox inside a div and add ur function in the event of onmouseover()
like this :
<div onmouseover="ChangeFocus()">
<asp:TextBox runat="server" ID="TxtBox1"></asp:TextBox>
</div>
<script type="text/javascript" language="javascript">
function ChangeFocus()
{
var Details = document.getElementById('<%=TxtBox1.ClientID %').text;
//Display the details of the textbox in the place u need
}
</script>
And take care to adjust the width of the div and the textbox to fit it.
or u can replace asp textbox with input field of type "text" and set it's event onmouseover to the function ChangeFocus().
Hope that this will be usefull

You could do something like this:
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
<asp:TextBox ID="txtName" runat="server" />
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1"
runat="server"
ErrorMessage="The name field is required."
ControlToValidate="txtName" Display="None">
</asp:RequiredFieldValidator>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />

Could the TextChanged event be a likely solution? and when would this event occur?
I tried that but it didnt work... It appears that the event fires after the page has been validated (on button click).
any work arounds?

Related

How to call TextChanged of TextBox WebForm Control

I use TextBox WebForm Control configured like a Bootstrap Datetimepicker.
And I need to initiate server side TextChanged event.
The code I have does not work so it does not call server side part.
HTML
<div class='datepicker input-group date' id='datetimepickerStart'>
<asp:TextBox ID="StartDate" class="form-control dateField" placeholder="Fecha" required runat="server" OnTextChanged="StartDate_TextChanged"></asp:TextBox>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
C#
protected void StartDate_TextChanged(object sender, EventArgs e)
{
// It does not fire :(
}
I try to force this event like this but no joy.
JS
$('#datetimepickerStart').datetimepicker();
$('#datetimepickerStart').datetimepicker().on('dp.change', function (event) {
console.log(event.date);
$('#StartDate').change(); // It does not help
$('#StartDate').html(event.date); // It does not help
});
Any clue how to fix it?
After searching a lot on the Internet I found this solution that worked to me:
$('#datetimepickerStart').datetimepicker().on('dp.change', function (event) {
__doPostBack('<%= Page.ClientID %>');
});
And on the code-behind:
public void RaisePostBackEvent()
{
// Do whatever, maybe call the OnTextChange method.
}
You can even pass some arguments in the like:
__doPostBack('<%= Page.ClientID %>', argument);
and
public void RaisePostBackEvent(string Arg){...}
In order for the TextChanged event to fire when you leave the textbox, you have to set the TextBox control's AutoPostBack property to true.
https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.autopostback(v=vs.110).aspx
<asp:TextBox ID="StartDate" class="form-control dateField" autopostback="true" placeholder="Fecha" required runat="server" OnTextChanged="StartDate_TextChanged"></asp:TextBox>
You also need to make sure that the name of the event handler for OnTextChanged matches the name of the method in your code (maybe this was just a typo).
Finally, I've found the TextChanged event to be a bit finicky and cause unwanted postbacks, page scrolling, loss of focus, etc., so you may want to consider using a client-side solution (eg. JQuery) instead.
name of method not correct, add autopostback= 'true' to textbox
Change this line to
<asp:TextBox ID="StartDate" class="form-control dateField" placeholder="Fecha" AutoPostBack="True" required runat="server" OnTextChanged="EndDate_TextChanged"></asp:TextBox>
and it will be ok.
Solution is to add ApiController and consume via JQuery what I need.
https://blogs.msdn.microsoft.com/henrikn/2012/02/23/using-asp-net-web-api-with-asp-net-web-forms/
By default ASP.Net page caches all the server control changed events and executes after Postback event.
So override this default by setting Autopostback property of a control to true like below.

How to implement a click event on textbox in ASP.NET?

In my web application I need a functionality so that when users click on textbox to input values, it should make the button and the other fields visible?
I am using the code provided below but, could not get it working.
C#:
protected void TextBox1_Click(object sender, EventArgs e)
{
ButtonSearch.Visible = true;
}
ASP.NET:
<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged" OnClick="TextBox1_Click"></asp:TextBox>
<asp:Button ID="ButtonSearch" runat="server" OnClick="ButtonSearch_Click" Text="Search" Visible="False" />
How to accomplish this?
Set AutoPostback="True". This way the event will be fired server-side, and the button will become visible.
<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged" OnClick="TextBox1_Click" AutoPostBack="true"></asp:TextBox>
However, if you only want to toogle visility of a button, you really should considerate javascript. This will save a trip back to the server.
<asp:TextBox onclick="txtBox1_ClientClicked()" ID="TextBox1" runat="server" OnClick="TextBox1_Click"></asp:TextBox>
<asp:Button ID="ButtonSearch" runat="server" OnClick="ButtonSearch_Click" Text="Search" style="display:none;" />
<script type="text/javascript">
function txtBox1_ClientClicked(){
var theButton = document.getElementById('<%=ButtonSearch.ClientID%>');
theButton.style.display = 'block';
}
</script>
You do not need to post back to the server to accomplish your job. You can use client side onFocus event and javascript/jquery, for example.
I know I used an input of type text, and you are using an ASP Control which posts on server, but here is a JSFiddle to get you on the right track: http://jsfiddle.net/Mmjtz/1/
$("<%= ButtonSearch.ClientID %>").click(function(){
$("#TextBox1").show():
});
In this code you need to pass fields ID which you want to visible on the click of button.
Put the textbox inside a div and use the div's onClick event from codebehind. It's not what you asked but it works for me without any errors. Here is a javascript function to implement requested event:
function toggleVisibility()
{
document.getElementById('TextBox1').disabled = true;
/*
...some other code...
*/
}
And of course, you have to define your onclick event at the div definition after implementing this JS function.
<div id="TBdiv" onClick="toggleVisibility()">
<asp:TextBox ID="TextBox1"..../>
</div>
IMPORTANT: Since you now disabled your TextBox from codebehind, you have to enable it in somewhere before you want to use it again. Otherwise you will not see it while the page is running.
jQuery is the perfect solution for your problem. The code would be something like this:
$("#TextBox1").on("click",function(){$("#ButtonSearch").css("visibility", "visible");})
You include the script by adding <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> to the page and then you can add the piece of code above to within <script></script> tags.

Custom Validator not firing

I realize there are lots of similar posts, however I have not found one that has worked for me unfortunately. Basically, I have an asp:customvalidator that I am trying to add to a validationgroup with other validators so that all error messages appear in the same alert. Here is the customvalidator
<asp:TextBox runat="server" ID="txtVideo1Url" Columns="20" Width="98%" />
<asp:CustomValidator runat="server" ID="valURL1" ControlToValidate="txtVideo1Url" OnServerValidate="txtVideo1Url_ServerValidate" Display="None" ValidationGroup="submission" />
and here is the event
protected void txtVideo1Url_ServerValidate(object sender, ServerValidateEventArgs e)
{
e.IsValid = false;
valURL1.Text = "FAIL!";
}
The event isn't firing at all and I have no idea why. Once I can get the event firing I can put some actual logic into it, lol
UPDATE: I've noticed that I am now able to get the event firing, however the validationsummary is set to display all errors in a messagebox and this error isn't getting added to the messagebox.
Remember to set this property on the CustomValidator...
ValidateEmptyText="True"
You need to set the CausesValidation property of the TextBox to true, like this:
<asp:TextBox runat="server" ID="txtVideo1Url" Columns="20" Width="98%" CausesValidation="true" />
You will have to add ValidationGroup="submission" to the ASP.NET control that will fire the postback.
CustomValidators don't fire if other Validators in your ASPx are not validating. You may need to force a Page.Validate("something"), with your specific validation group. I suggest look at OnTextChanged event to force a page validate.

Cannot run event handler in .cs file from ModalPopupExtender

I want to create a simple Yes/No popup window. So I have added a ModalPopupExtender to the .aspx page.
The popup panel's markup is:
<asp:Button ID="btn_yes" runat="server" Text="Yes" onclick="btn_yes_Click" />
<br/>
<br/>
<asp:Button ID="btn_no" runat="server" Text="No" />
For some reason, I cannot get into the function btn_yes_Click, not sure why. Do I have to use Javascript?
I suspect that you are also setting the ModalPopupExtenders OkControlID property to "btn_yes".
As you can see in this related question this will cause the OnClick event not to fire.
There is a chance that the OKControlID Property on ModalPopupExtender tag is specified. Take a look at this topic: The Event Handler of the OK button inside a Modal PopUp is not executing

How to bypass validation for a button in ASP.NET?

I have an ASP.NET form that takes input from a user. There's a Submit button on the form and a button called Calc which does a calculation to populate a text field. The problem I'm having is that on the form I have a set of <ASP:REQUIREDFIELDVALIDATOR> validators and when the Calc button is pressed the form gets validated. I don't want the required fields to be validated when the Calc button is pressed, only the Submit button. Any way around this?
Set the CausesValidation property to false.
<asp:Button runat="Server" ... CausesValidation="False" />
Button.CausesValidation (If I remember correctly).
Try putting CausesValidation="false" as a button attribute.
Some sample code:
http://weblogs.asp.net/scottgu/archive/2005/08/04/421647.aspx
ASPX Page:
<asp:Button ID="buttonNew" runat="server" Text="New" CausesValidation="False" />
OR
CodeBehind Page: (.cs)
buttonNew.CausesValidation = false;
Check here to know more about Validated and Validating events for the controls.
Set the button.causesValidation to false.
this link
However, if all it is doing is calculating something based on user input then you shouldn't have it posting back at all. I would recommend using an HTML button and attach some javascript to it to do your work for you and then you won't have this problem.
While designing the button, you can set its property CausesValidation="false" to avoid validation on button click event. It does not allow to validation the server control and perform its click event only
You should use this
UseSubmitBehavior="False"
To disable validation in a specific control
Set the control's CausesValidation property to false.
<asp:Button id="Button3" runat="server"
Text="Cancel" CausesValidation="False">
</asp:Button>
To disable a validation control
Set the validation controls Enabled property to false.
To disable client-side validation
Set the validation controls EnableClientScript property to false.
For More Info

Categories