【问题标题】:Textbox becomes readonly on postback even when setting the readonly attribute to false manually即使手动将只读属性设置为 false,文本框也会在回发时变为只读
【发布时间】:2015-01-10 13:26:29
【问题描述】:

所以,在我当前的 ASP.net 应用程序中,我遇到了一个奇怪的错误。我在现有页面中添加的文本框在回发后进入只读模式。当页面第一次加载时,文本框工作正常。但在页面加载后,它保持启用并处于只读模式。

我在 IE 中检查了开发工具,并且文本框的只读属性设置为 false,正如预期的那样。我什至可以从页面加载期间调用的 js 函数中设置其他属性,它们工作正常。只有 readonly 属性不起作用。

我无法弄清楚为什么会发生这种情况的原因,所以我也无法解决它。

 <tr>  <td nowrap align="right"> <asp:Label ID="lblResTimeDescription" runat="server" EnableViewState="False" CssClass="Common">Response Time Comments</asp:Label>&nbsp;:&nbsp;</td>

文本框代码:

>  <asp:TextBox ID="txtResTimeDescription" CssClass="TextBox"
> MaxLength="200" TextMode="MultiLine" runat="server" Width="100%"
> Height="50px" ReadOnly="false"></asp:TextBox>

附:请告诉我,我可以在这里发布哪些代码。

编辑:页面加载结束时调用的 JS 函数。

function fnEnableComments(e) {
var strCompletion = document.getElementById("ddlCompletion").value;
if (strCompletion == "Y") {
    document.getElementById("txtResTimeDescription").disabled = false;
    document.getElementById("txtResTimeDescription").setAttribute("value", "zyx");
    document.getElementById("txtResTimeDescription").setAttribute("ReadOnly",false);
}
else {
    document.getElementById("txtResTimeDescription").disabled = true;
    document.getElementById("txtResTimeDescription").value = "";
}

}

这个函数被正确调用,因为我可以看到值更改为 zyx。

编辑2:

从代码和 js 中删除了所有只读提示。还是同样的问题。此外,文本框正在正确启用,在更改下拉列表时,会正确设置值。我什至可以单击文本框来设置焦点,但我无法更改其中的值。

编辑 3:

程序工作流程说明: 用户从列表页面中选择一条记录,页面加载有关该记录的信息。用户可以输入数据并保存。但是用户不能在不提供 cmets 的情况下将完成标志设置为 yes。在其他情况下,根本不需要评论。此文本框用于添加 cmets。通常用户更新所有数据,并保存信息。保存信息后,页面刷新,此时用户更改完成标志。因此,在下拉更改和页面加载时,我检查完成标志并启用和禁用 cmets 文本框。

就逻辑而言,这一切都很好。只有当用户第一次保存数据并重新加载页面时,即使用户更改完成标志,文本框仍保持只读状态。如果用户再次刷新页面,则代码可以正常工作。基本上,这个错误会导致用户在每次保存后手动刷新页面,从而破坏了从代码刷新的目的。

【问题讨论】:

  • 您显示的是标签而不是文本框
  • 对不起。不知何故,代码标签搞砸了。
  • 好的,尝试完全删除只读属性并发布您的页面加载代码
  • 我想我知道问题出在哪里,这条线正在执行,所以 strCompletion 不是 Y 在回发document.getElementById("txtResTimeDescription").disabled = true;
  • Readonly 属性使某些内容只存在于那里就成为只读的——没有值设置。它需要被删除。

标签: javascript c# asp.net


【解决方案1】:

尝试在第一次最终确定您需要的内容之前将其放置在后面的代码中

txtResTimeDescription.Attributes.Remove("readonly");

如果你在拿走这个文本框的时候设置了只读属性

【讨论】:

  • 试过了。没运气。显然,这仅在回发后发生。如果我重新加载页面,它工作正常。
【解决方案2】:

终于找到了解决办法。我仍然不知道为什么会这样。但下面的代码成功了。

        document.getElementById("txtResTimeDescription").setAttribute("readOnly", false);

我之前也使用了相同的代码,遗憾的是属性大写错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2017-03-24
    • 2013-02-26
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多