Friday, 23 November 2012

Registering ASP.NET after IIS Installation

If the IIS web server is installed after the .NET Framework was installed, ASP.NET web pages will not work. This issue will also occur if the web server is reinstalled. The reason for this is that the ASP.NET file extensions are not being associated with the IIS mappings.

How To Fix
This can be fixed with the following procedure:
  1. Go to the Windows command prompt by opening the Start menu, select Run, type cmd and press OK.
  2. When your in the command prompt, type "%windir%\Microsoft.NET\Framework\.NET_Version\aspnet_regiis.exe" –i
  3. Then register Aspnet_isapi.dll with the following command:
    "regsvr32 %windir%\Microsoft.NET\Framework\.NET_Version\aspnet_isapi.dll"
Example for Registering .NET 2.0/3.0/3.5
"%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe" –i
"regsvr32 %windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll"

If you running .NET 3.0 or 3.5, you need to use the above example for .NET 2.0. This version of .NET is installed with 3.0/3.5. The newest versions do not have the aspnet_isapi.dll files in their folders. This isn’t a problem because .NET 3.0/3.5 are simply v2.0 with extensions. More appropriates version numbers for the latest Frameworks should be 2.1 and 2.2 since they don’t add a great deal to v2.0.

Thursday, 22 November 2012

User control for Textbox Date entry

.ascx code-

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="DateTextBox.ascx.cs" Inherits="DateTextBox" %>

<script language="javascript" type="text/javascript">
    function isDate(txtDate, separator) {
        var aoDate,           // needed for creating array and object
        ms,               // date in milliseconds
        month, day, year; // (integer) month, day and year
        // if separator is not defined then set '/'
        if (separator === undefined) {
            separator = '/';
        }
        // split input date to month, day and year
        aoDate = txtDate.split(separator);
        // array length should be exactly 3 (no more no less)
        if (aoDate.length !== 3) {
            return false;
        }
        // define month, day and year from array (expected format is m/d/yyyy)
        // subtraction will cast variables to integer implicitly
        month = aoDate[1] - 1; // because months in JS start from 0
        day = aoDate[0] - 0;
        year = aoDate[2] - 0;
        // test year range
        if (year < 1000 || year > 3000) {
            return false;
        }
        // convert input date to milliseconds
        ms = (new Date(year, month, day)).getTime();
        // initialize Date() object from milliseconds (reuse aoDate variable)
        aoDate = new Date();
        aoDate.setTime(ms);
        // compare input date and parts from Date() object
        // if difference exists then input date is not valid
        if (aoDate.getFullYear() !== year ||
        aoDate.getMonth() !== month ||
        aoDate.getDate() !== day) {
            return false;
        }
        // date is OK, return true
        return true;
    }
    function checkDate() {
        // define date string to test
        var dt = document.getElementById('<%=TxtDate.ClientID %>');
        var txtDate = document.getElementById('<%=TxtDate.ClientID %>').value;
        // check date and print message
        if (isDate(txtDate)) {
            return true;
        }
        else {
            alert('Invalid date format!');
            dt.value = "";
            dt.focus();
            return false;
        }
    }

  

</script>

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<asp:TextBox ID="TxtDate" runat="server" OnTextChanged="TxtDate_TextChanged" OnChange="checkDate();"></asp:TextBox>
<cc1:MaskedEditExtender ID="med" runat="server" TargetControlID="TxtDate" ClearTextOnInvalid="true"
    AutoComplete="false" CultureName="en-US" InputDirection="LeftToRight" Mask="99/99/9999"
    MaskType="Date" PromptCharacter="_">
</cc1:MaskedEditExtender>
<cc1:CalendarExtender ID="ceTxtdate" runat="server" TargetControlID="TxtDate" Format="dd/MM/yyyy">
</cc1:CalendarExtender>
<asp:RequiredFieldValidator ID="Rfv_Date" runat="server" ControlToValidate="TxtDate"
    Display="None" SetFocusOnError="true"></asp:RequiredFieldValidator>

c# code-

using System;

public partial class DateTextBox : System.Web.UI.UserControl
{
    public bool boolDefault = false;
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    public event System.EventHandler TxtTextChanged;
    protected virtual void OnTextBoxTextChanged(object sender)
    {
        if (this.TxtTextChanged != null)
        {
            this.TxtTextChanged(sender, new EventArgs());
        }
    }
    protected void TxtDate_TextChanged(object sender, EventArgs e)
    {
        OnTextBoxTextChanged(sender);
    }
    public string TextBoxValue
    {
        get { return TxtDate.Text; }
        set { TxtDate.Text = value; }
    }
    public string Validate
    {
        set { this.Rfv_Date.ValidationGroup = value; }
    }
    public bool TxtEnabled
    {
        set { this.TxtDate.Enabled = value; }
    }
    public bool TxtReadOnly
    {
        set { this.TxtDate.ReadOnly = value; }
    }
    public bool TxtAutoPostback
    {
        set { this.TxtDate.AutoPostBack = value; }
    }
    public string TxtCss
    {
        set { this.TxtDate.CssClass = value; }
    }
    public string ErrorMessage
    {
        set { this.Rfv_Date.ErrorMessage = value; }
    }
    public bool DefaultValue
    {
        set
        {
            boolDefault = value;
            if (boolDefault)
            {
                this.TxtDate.Text = DateTime.Today.Date.ToString("dd/MM/yyyy");
            }
            else
            {
                this.TxtDate.Text = "";
            }
        }
    }
}

Textbox Date validation in javascript

JavaScript Code-

<script language="javascript" type="text/javascript">
    function isDate(txtDate, separator) {
        var aoDate,           // needed for creating array and object
        ms,               // date in milliseconds
        month, day, year; // (integer) month, day and year
        // if separator is not defined then set '/'
        if (separator === undefined) {
            separator = '/';
        }
        // split input date to month, day and year
        aoDate = txtDate.split(separator);
        // array length should be exactly 3 (no more no less)
        if (aoDate.length !== 3) {
            return false;
        }
        // define month, day and year from array (expected format is m/d/yyyy)
        // subtraction will cast variables to integer implicitly
        month = aoDate[1] - 1; // because months in JS start from 0
        day = aoDate[0] - 0;
        year = aoDate[2] - 0;
        // test year range
        if (year < 1000 || year > 3000) {
            return false;
        }
        // convert input date to milliseconds
        ms = (new Date(year, month, day)).getTime();
        // initialize Date() object from milliseconds (reuse aoDate variable)
        aoDate = new Date();
        aoDate.setTime(ms);
        // compare input date and parts from Date() object
        // if difference exists then input date is not valid
        if (aoDate.getFullYear() !== year ||
        aoDate.getMonth() !== month ||
        aoDate.getDate() !== day) {
            return false;
        }
        // date is OK, return true
        return true;
    }
    function checkDate() {
        // define date string to test
        var dt = document.getElementById('<%=TxtDate.ClientID %>');
        var txtDate = document.getElementById('<%=TxtDate.ClientID %>').value;
        // check date and print message
        if (isDate(txtDate)) {
            return true;
        }
        else {
            alert('Invalid date format!');
            dt.value = "";
            dt.focus();
            return false;
        }
    }
</script>

<asp:TextBox ID="TxtDate" runat="server"OnChange="checkDate();"></asp:TextBox>