我的代码中有一些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;
}
}
我只是想知道为什么禁用文本框会清除其中的值?这只是默认行为还是我错过了什么?
答案 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.";
}