为什么textbox.disabled = true会清除文本框的文本?

时间:2017-10-19 20:37:58

标签: javascript c# asp.net

我的代码中有一些asp:Textbox元素,在用户点击验证后我用javascript禁用了这些元素。

例如:

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

我的javascript函数是:

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

我遇到的问题是在提交文本框中的值之后被清除了。

为了解决这个问题,我更改了JS函数,因此我没有禁用,而是将文本框的readOnly属性设置为true:

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

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

我只是想知道为什么禁用文本框会清除其中的值?这只是默认行为还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

在这种情况下,ViewState与此无关。问题在于禁用的输入控件不是Form Post返回服务器的一部分。但是因为TextBox仍然存在于页面上,asp.net将使用从PostBack接收的值填充它,但是那个是null,因此TextBox变为空。

您可以使用以下代码段进行检查。您会看到fromDateE.UniqueID不存在,因此fromDateE将被清空。

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