为啥只读文本框在 ASP.NET 中不返回任何数据?

Posted

技术标签:

【中文标题】为啥只读文本框在 ASP.NET 中不返回任何数据?【英文标题】:Why does a read-only textbox not return any data in ASP.NET?为什么只读文本框在 ASP.NET 中不返回任何数据? 【发布时间】:2010-10-24 10:46:56 【问题描述】:

我已将文本框设置为只读。当用户点击它时,会显示一个日历,用户选择输入到只读文本框中的日期。

但是当我尝试将数据输入数据库时​​,它显示空值。怎么了?

【问题讨论】:

【参考方案1】:

对于 ASP.NET 的 Readonly 属性和 html 输入元素的 readonly 属性,有一点奇怪。与其设置 Web 控件的 Readonly 属性,不如尝试简单地将 HTML 属性添加到控件,如下所示:

textBox.Attributes.Add("readonly", "readonly");

这将使该控件在客户端浏览器中为只读,但仍允许您在输入回传到服务器时检索输入的值。

【讨论】:

难以置信!今晚我在这个麻烦上浪费了 2 个小时……该死! 还是不行。简单的错误:必须清除浏览器的缓存才能重新加载新代码 太棒了!完美运行! 对我不起作用!仍然无法从文本框中获取价值 伟大的@Andrew...非常优雅的解决方案。【参考方案2】:

系统假定只读或禁用控件不会在客户端更改,因此它不会将更改后的值发布回服务器。您需要设置客户端只读属性而不是服务器端版本。

【讨论】:

就像一个注释 - 实际上这些值是由用户浏览器发布到服务器的,但它们没有被反序列化..【参考方案3】:

ASP.NET 假定 Web 控件的 Readonly 和 Enabled="false" 属性不会改变。因此,它不会回发上面 tom 提到的值。您可以使用此解决方法。将此添加到 html 中,您不必担心 Readonly 属性或禁用控件。

   onkeydown="return false;"

【讨论】:

我还建议添加 onpaste="return false;"或者用户仍然可以将内容粘贴到该字段中。并且您可能还想阻止显示 IE 清除按钮:***.com/q/13481577/74585【参考方案4】:

或者您可以将 ASP 文本框替换为带有 runat="Server" 的输入类型文本,然后将只读属性添加为只读。检查链接

Workarounds to access the Readonly Textbox value on server side when changed through client side script

【讨论】:

以上是关于为啥只读文本框在 ASP.NET 中不返回任何数据?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 中的 Ajax 自动完成文本框在母版页中不起作用

文本框在 DataGridview 文本框列中不可见

文本框在浮出控件、UWP 商店应用程序中变为只读

为啥我的正则表达式在 ASP.NET 中不起作用

为啥 Marquee 在小部件中不起作用?

为啥 AppDomain.CurrentDomain.BaseDirectory 在 asp.net 应用程序中不包含“bin”?