There are various ways to inject JavaScript to the ASP.NET Controls. In this post we are going to discuss those techniques.
For simple illustrative purpose, normally in an ASP.NET Webform, in the controls like Text box, whenever you press enter key it will submit the page. In other words, it will post the page back to the server. In this post, we are going to see how to avoid this by using JavaScript.
Technique 1: Inject JavaScript directly to the markup.
In this way, you need to include the “onkeydown” event on each text box control.
Markup:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DemoWebForm.WebForm1" %>
-
- <!DOCTYPE html>
-
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- Enter First Name:
- <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="false" onkeydown="return (event.keyCode!=13);"></asp:TextBox>
- <br />
- Enter Last Name:
- <asp:TextBox ID="TextBox2" runat="server" AutoPostBack="false" onkeydown="return (event.keyCode!=13);"></asp:TextBox>
- <br />
-
- <asp:Button runat="server" ID="btnSubmit" Text="Submit" />
- </form>
- </body>
- </html>
Technique 2: Inject JavaScript through server side code.
If you want to achieve the above one in server side, that is you loop through the controls and inject the same javascript snippet. For this, you can use the following markup and code behind:
Markup:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DemoWebForm.WebForm1" %>
-
- <!DOCTYPE html>
-
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- Enter First Name:
- <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="false" ></asp:TextBox>
- <br />
- Enter Last Name:
- <asp:TextBox ID="TextBox2" runat="server" AutoPostBack="false" ></asp:TextBox>
- <br />
-
- <asp:Button runat="server" ID="btnSubmit" Text="Submit" />
- </form>
- </body>
- </html>
Code behind:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
-
- namespace DemoWebForm
- {
- public partial class WebForm1 : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- DisableEnterKey(Page.Controls);
-
- }
-
- public void DisableEnterKey(ControlCollection ctrls)
- {
- foreach (Control c in ctrls)
- {
- foreach (Control ctrl in c.Controls)
- {
- if (ctrl is TextBox)
- ((TextBox)ctrl).Attributes.Add("onkeydown", "return (event.keyCode!=13);");
- else if (ctrl is DropDownList)
- ((DropDownList)ctrl).Attributes.Add("onkeydown", "return (event.keyCode!=13);");
- }
- }
- }
- }
- }
Technique 3: Using JQuery.
In the above two techniques, either we need to include the same line in each control or we need to loop through the controls and inject the JS. In some cases you may want to achieve the same using jQuery.
Markup:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DemoWebForm.WebForm1" %>
-
- <!DOCTYPE html>
-
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <title></title>
- <script src="Scripts/jquery-1.10.2.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- $('input[type=text]').on("keydown", "", function () { return (event.keyCode != 13); });
- });
- </script>
- </head>
- <body>
- <form id="form1" runat="server">
- Enter First Name:
- <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="false"></asp:TextBox>
- <br />
- Enter Last Name:
- <asp:TextBox ID="TextBox2" runat="server" AutoPostBack="false"></asp:TextBox>
- <br />
- <asp:Button runat="server" ID="btnSubmit" Text="Submit" />
- </form>
- </body>
- </html>
The above one is so simple, that is no repetition of code.
Readers, let me know your thoughts as comment!