How to execute in JavaScript function in ASP.NET using C# - c#

i have a textarea which i want to disable when I check a checkbox. I made a working demo in plain HTML and JavaScript , but When I am migrating to Asp.net, neither the function is being executed nor I can keep the OnSelect event in my check box.
<asp:CheckBox ID="ChkOthers" runat="server" Text="Others(Please Explain)" Width="205px" AutoPostBack="True" OnCheckedChanged="ChkOthers_CheckedChanged" />
<asp:TextBox ID="TxtOtherReason" runat="server" MaxLength="1024" TextMode="MultiLine" />
i want to create client side validation when check box is checked textbox is enable else disable.

I guess you problem is in the id of the controls so here is my solution for your problem
//Remove the AutoPostBack property and the OnCheckedChanged="ChkOthers_CheckedChanged"
<asp:CheckBox ID="ChkOthers" runat="server" Text="Others(Please Explain)" Width="205px" OnClick="javascript:YourFunction()" />
<asp:TextBox ID="TxtOtherReason" runat="server" MaxLength="1024" TextMode="MultiLine" />
and put the following javascript to handle the enable and diable of the textbox
<script>
function YourFunction() {
document.getElementById('<%= TxtOtherReason.ClientID %>').disabled = document.getElementById('<%= ChkOthers.ClientID %>').checked == false ? true : false;
}
</script>

It has been a while for me since I used ASP.NET but from memory there is something like an "OnClientClick" event and a validation property in asp.net properties for a control that you can use to call client side JavaScript code..
Sorry for the vague answer - perhaps someone can expand on it.

You are using a server side handling of the event. Use a client side handling with "OnClientClick". You can do something like:
<asp:CheckBox ID="ChkOthers" runat="server"
Text="Others(Please Explain)"
Width="205px"
AutoPostBack="True"
OnClientClick="alert(this.checked);"
OnCheckedChanged="ChkOthers_CheckedChanged" />
It seems this also does not work. I am yet to prove.
Also see a similar post on StackOverflow: OnClick vs OnClientClick for an asp:CheckBox? and there is also an issue in MS site: http://connect.microsoft.com/VisualStudio/feedback/details/103398/checkbox-onclientclick

you can put the code in cs files .after it loaded you can make the onclientclick method to an exist javascript function .
and in the javascript function you can get the text box use the name or the simple id which you can get from the source file the server gives to the browser!

Related

OnKeyPress or some type of event that happens as soon as a value has changed in a textbox?

I'm working in C# /ASP.Net and I'm trying to figure out a way to write some code that will run as soon as a textbox's value changes. In Access this would probably be done with a KeyPress event, but I'm using C#. I know nothing about Javascript, and I know there's an OnBlur event for a textbox but it only takes Java.
Is there any way to do this using only C# code-behind and ASP.Net, or am I going to have to suck it up and teach myself Javascript?
What I want to do is determine if any change has been made to a textbox at the moment of the keystroke, and if so I need to change the "Visible" properties of two buttons so that button1 is visible and button2 is not. If no change has been made by the time I get to the OnTextChanged event, then button2 is visible and button1 is not.
There is no way to do this that is native to Asp.Net. You will have to learn a little javascript or jQuery. For example, in native js:
<asp:TextBox runat="server" ID="txt" ClientIDMode="Static" onkeyup="onEnterText()"></asp:TextBox>
<asp:Button runat="server" ID="btnOne" ClientIDMode="Static" Text="One" style="display:none;" />
<asp:Button runat="server" ID="btnTwo" ClientIDMode="Static" Text="Two" />
<script type="text/javascript">
function onEnterText() {
var text = document.getElementById("txt").value,
one = document.getElementById("btnOne"),
two = document.getElementById("btnTwo");
if (text.length > 0) {
one.setAttribute("style", "display:inline;");
two.setAttribute("style", "display:none;");
} else {
one.setAttribute("style", "display:none;");
two.setAttribute("style", "display:inline;");
}
}
</script>
ClientIDMode="Static" is important because it ensures that the control's ID is unchanged (Asp.Net usually creates a client id based on the control hierarchy), enabling you to find the control in javascript.
Also bear in mind that your buttons' visibility will need to be managed during postbacks to mirror the client-side logic.

ValidationGroup Not Firing

I have a text box with required field validator:-
<asp:TextBox ID="txtCName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvCName" runat="server" ErrorMessage="Pleas Enter Name" ControlToValidate="txtCName" ></asp:RequiredFieldValidator>
I need to show error message on button click:-
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click"
ValidationGroup="sub">
I am using the following code to assign validation group to the required field validator (it is in document.ready() function) :-
$("#<%=rfvCName.ClientID %>").attr('ValidationGroup', 'sub');
But it is not showing any error message on button click. Please help me.
I need to do it using Jquery. I don't want to assign ValidatioGroup directly to the control.
Add validation group ValidationGroup="Sub"
<asp:RequiredFieldValidator ID="rfvCName" runat="server" ErrorMessage="Pleas Enter Name" ValidationGroup="sub" ControlToValidate="txtCName" ></asp:RequiredFieldValidator>
when the page(server side) prerender the object requiredFieldValidator, some javascript is added into page automatically by .net framework.
this javascrript code check the validationgroup.
add manually the validationgroup attribute client-side without this javascript code not work.
you can see this code in developpers tool searching "ValidationGroup"
if you cannot add attribute in html, you can add this attribute in a event server side like load or prerender.

Disable buttons onclick in asp wizard

I have an asp wizard on my page with three steps.
<asp:Wizard ID="wizardBestellen" runat="server" ActiveStepIndex="0" DisplaySideBar="False" onfinishbuttonclick="wizard_NextButtonClick" onnextbuttonclick="wizard_NextButtonClick" onpreviousbuttonclick="wizard_PreviousButtonClick">
<StartNavigationTemplate></StartNavigationTemplate>
<StepNavigationTemplate></StepNavigationTemplate>
<FinishNavigationTemplate></FinishNavigationTemplate>
<WizardSteps>
<asp:WizardStep runat="server" ID="step1" StepType="Start">
<uc1:control ID="uc1" runat="server" />
</asp:WizardStep>
<asp:WizardStep runat="server"ID="step2" StepType="Step">
<uc2:control ID="uc2" runat="server" />
</asp:WizardStep>
<asp:WizardStep ID="step3" runat="server" StepType="Finish">
<uc3:control ID="uc3" runat="server" />
</asp:WizardStep>
</WizardSteps>
</asp:Wizard>
Now every control has a next and a previous button which after the click validates your data and sends you to the next step. The buttons all look like:
<asp:LinkButton ID="bntPrevious" runat="server" CommandName="MovePrevious" CssClass="buttonOrange" CausesValidation="false"><span>Previous</span></asp:LinkButton>
<asp:LinkButton ID="btnNext" runat="server" CommandName="MoveNext" CssClass="buttonOrange" CausesValidation="true"><span>Next</span></asp:LinkButton>
So far it all works perfectly..
Now i wanted to disable the buttons after clicking on it and show a div with a loader image. So i created a div named divLoader and a javascript function which hides the div the buttons are in and shows the div with the loader.
function ToggleDiv(divButton, divLabel)
{
if (divButton.style.display == 'block')
{
divButton.style.display = 'none';
divLabel.style.display = 'block';
}
else
{
divButton.style.display = 'block';
divLabel.style.display = 'none';
}
}
But i can't get this to work. The ToggleDiv function works great in another situation, so thats not the problem.
I've tried calling the function from the OnClick attribute in the linkbutton but this gave me an error. I tried the OnClientClick, but this didn't work and i also tried setting the onclick attribute in the code behind, this also was a dead end.
Can anybody explain to me what i am doing wrong or is there another way to prevent users clicking the button twice?
Sounds like you're not getting the binding to work.
The first thing I would do is check the emitted control IDs by doing a view-source. Some implementation of the .NET framework add extra fluff to these control IDs, so can't guarantee that it will be the same as appears on the form.
Next, I would try some JavaScript late binding. If you have a JavaScript file, put it there. If not create one or add a JavaScript block to the foot of your form (create a new file for preference).
All this would be much easier with a JAvaScript lbrary such as jQuery, but for the moment lets assume you don't have one.
Add a window onload event handler
window.onload = function(){
//code to go here
}
Now add the click binding for your button:
window.onload = function(){
document.getElementById("***YOUR BUTTON ID***").onclick = function(){
ToggleDiv(this, document.getElementById("***YOUR LABEL ID***"));
}
}
I said this would be a little easer with jQuery, well, this is the equivalent implementation:
$(document).ready(function(){
$("#***YOUR BUTTON ID***").click(function(){
$(this).toggle();
$("#***YOUR LABEL ID***")).toggle();
});
});
The above sample removes the need for your ToggleDiv function entirely.

asp.net OnClientClick not rendered for initially disabled Button

I have a disabled asp.Button, which I enable later with JavaScript. Like this
<asp:Button ID="btnSave" runat="server" Text="Save" Enabled="false" OnClientClick="; return ValidateFields();" OnClick="btnSave_Clicked" />
However, the "onclick" method is not rendered as html when the control is disabled. My work around is to add the following code in PageLoad.
btnSave.Attributes["onclick"] = "return ValidateFields();";
Is there a more convenient work around for this?
Thanks
You can use the html attribute for disabled
<asp:Button disabled="disabled" ID="btnSave" runat="server" Text="Save" Enabled="false" OnClientClick="; return ValidateFields();" OnClick="btnSave_Clicked" />
I assume you then make it enabled in clientside? if so then you can enable it with :
document.getElementById('MainContent_btnSave').removeAttribute('disabled'); //or jquery alternative where MainContent_btnSave is the clientid of the control
Well, it's obvious why the framework behaves like this: if a button is disabled, why it should have an onclick event handler? The user can't click it if it's disabled! Because of this, the framework removes the attribute.
So, I don't think you have other options besides appending the attribute manually.

How to show/hide buttons contain in a template by javascript

I have two asp.net buttons inside a template (Expand and Collapse)
I want to implement a simple client side javascript function to hide the expand button after press it and show the collapse button and vice versa.
<asp:Button ID="btnExpand" runat="server" CommandName="Expand"
CommandArgument='<%# Container.DataElement("Id")%>' Text="+" />
<asp:Button ID="btnCollapse" runat="server" CommandName="Collapse"
CommandArgument='<%# Container.DataElement("Id")%>' Text="-" />
I tried OnClientClick event but I didn't know how to get the sender button and the second button from javascipt because they're in a template and their IDs will be generated.
I tried also to change their visibility from the code behind in the server (by Visible property) but the problems is the event handler will be fired after the postback and the changes will not be applied in the client.
Any help !!
sorry if the question is silly, I'm new in the web development.
Thanks in advance.
Use ClientID like:
<!-- Supposing you have the following button control -->
<asp:button id="myButton" runat="server" />
<script type="text/javascript">
var theID = '<%= myButton.ClientID %>';
// Now do whatever you like with it.
</script>
Be careful where you place that code. You need to make sure that the html client renderer has finished creating that item.
In the function where you are implementing the hide and show template, put $("#buttonID").hide();.

Categories

Resources