禁用 ASP 文本框的键盘输入

Disable Keyboard Entry to ASP Textbox

我有一个附加了 ajaxToolkit:calendarextender 的文本框。
我还有一个 OnTextChanged="do something" 和一个 AutoPostBack=true.

我只希望我的用户能够使用日历扩展器将数据输入文本框。

我尝试将文本框上的 readonly 属性 设置为 true。这仅在文本框中存在现有文本时有效(如果我 textbox.text = "such and such" 然后通过日历扩展程序输入)。

如果我尝试通过单击文本框并在日历扩展器中选择日期来选择日期,由于 autopostbackOnTextChanged 事件,输入的任何内容都会立即被清除。我得到这个例外:

Exception was thrown at line 3169, column 13 in http://localhost:44994/ScriptResource.axd?d=Es_vqsdtlYssgAF4A3XSWnRVXoRhHI0Nw5kbnX4TQidZ-ER24J-iO0awsG5JH1rtQZR_iEqhZs7sdOBQ9bRTWyylEaGjH7fv-s8DBZ9g2dBrQRgBCGkgUkMcfnp1eLLpQ46PuRCK6kw9bzcz5Laedpe2sZMPd6VRGBt-E7Jq3Hi6WSFYwQmlvlft0Bho70p20&t=7b689585
0x800a138f - JavaScript runtime error: Unable to get property 'AbbreviatedMonthNames' of undefined or null reference

如何禁止通过键盘输入文本框,只允许 calendarextender 输入?

将属性 onkeydown="return false;" 添加到文本框。这样用户将无法输入任何内容,但点击仍然有效。

您可能还想添加 onpaste ="return false;" 以防止出现 copy/pasting 文本。

另一种方式,在页面加载期间将其添加到您后面的代码中:

protected void Page_Load(object sender, EventArgs e)
{
    txtFrm.Attributes.Add("readonly", "true");
}

这将阻止用户立即键入和复制粘贴输入。