一些背景
所以我正在完成一个网络应用程序的一些增强功能,该应用程序可以自动插入数据。用户填写了一些文本框,并且它们之间的其他文本框具有自动计算的值。接收自动计算值的文本框必须是只读的,以防止用户更改,但不能禁用,否则它们不会在回发时提交。每个文本框旁边都有一个复选框,因此用户可以有意识地选中它以使字段可写,从而允许他们覆盖插值。
浏览器:IE 7(不确定在其他浏览器中的表现如何)
问题
当设置readOnly
时使用 JavaScript 的文本框的属性,文本框中的值通过表单提交:我可以在服务器端(ASP.NET)上使用 myTextBox.Text
看到它它位于 Request.Form("myTextBox")
.
如果我设置ReadOnly="true"
在我的<asp:TextBox />
上元素并且不使用 JavaScript 方法,则文本框中的值不能可从 myTextBox.Text
获取。 (我假设它从未进入 ViewState
),但它正在以以下形式提交: Request.Form("myTextBox")
有一个值。
我的问题
这到底是怎么回事?这是设计使然吗?这是浏览器问题吗?我发现错误了吗?令人烦恼的是,我必须有一些额外的 JavaScript 来在页面加载时首先禁用文本框的可写性,以使我的应用程序正常工作。
谢谢!
最佳答案
这是设计使然。作为 ASP.NET 安全功能,在服务器上将其设置为只读将使其保持只读状态,无论客户端上发生什么情况。如果您希望他们能够覆盖它并实际提交一个值,那么它在服务器上并不是真正的只读,而是在客户端上有条件地只读。您可以在他们选中复选框以更改服务器上的只读属性时进行回发,或者使用以下 ASP.NET 代码在客户端上仅设置只读属性:
MyControl.Attributes.Add("readOnly","readOnly")
关于asp.net - 使用 HTML 'readonly="readonly "' vs. JavaScript ' element.readOnly = true;' 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1060518/