psj01
psj01

Reputation: 3245

why does textbox.disabled= true clears the text of the textbox?

I have a few asp:Textbox elements in my code, which I was disabling with javascript after the user clicks validate.

eg:

 <asp:TextBox CssClass="dateClass" ID="fromDateE" width="100px" runat="server" Text=""></asp:TextBox>

My javascript function was :

function disableDateFields()
{
    var dates = document.getElementsByClassName("dateClass");
    for (var i = 0; i < dates.length; i++) 
    {
        //console.log(dates[i]);
        dates[i].disabled = true;
    }
}

The problem I had was after submit the value I had inside the textbox was getting cleared.

To get around this problem I changed the JS function so instead of disabling I set the readOnly property of the text box to true :

function disableDateFields()
{
    var dates = document.getElementsByClassName("dateClass");

    for (var i = 0; i < dates.length; i++) 
    {
        //console.log(dates[i]);
        dates[i].readOnly= true;
    }
}

I am just wondering why disabling the textbox clears out the value inside of it? Is this simply the default behavior or am I missing something?

Upvotes: 0

Views: 604

Answers (1)

VDWWD
VDWWD

Reputation: 35514

In this case ViewState has nothing to do with this. The problem lies in the fact that disabled input controls are not part of the Form Post back to the server. But because the TextBox does still exists on the page asp.net will fill it with the values it receives from PostBack, but that one is null so the TextBox is made empty.

You can check this with the following snippet. You will see that fromDateE.UniqueID does not exists and thus fromDateE will be emptied.

if (Request.Form[fromDateE.UniqueID] == null)
{
    fromDateE.Text = "Form Post was empty.";
}

Upvotes: 1

Related Questions