代码之家  ›  专栏  ›  技术社区  ›  Cᴏʀʏ bcherry

使用HTML'readonly=“readonly”'vs.JavaScript'element.readonly=true;'

  •  2
  • Cᴏʀʏ bcherry  · 技术社区  · 16 年前

    一些背景

    因此,我在一个web应用程序中完成了一些增强,该应用程序可以自动插入数据。用户可以填写一些文本框,它们之间的其他文本框会自动计算值。接收自动计算值的文本框必须为只读,以防止用户更改,但不能禁用,否则回发时将无法提交。每个文本框旁边都有一个复选框,因此用户可以有意识地选中它以使字段可写,从而允许它们覆盖插值。

    浏览器:IE 7(不确定它在其他浏览器中的行为)

    问题

    在设置 readOnly 属性,文本框中的值随表单一起提交:我可以在服务器端(ASP.NET)通过 myTextBox.Text Request.Form("myTextBox") .

    如果我设定 ReadOnly="true" 在我的 <asp:TextBox /> 可从 (我想它从来没有进入过 ViewState ),但它将与以下表格一起提交: Request.Form(“myTextBox”) 有价值。

    我的问题

    谢谢

    2 回复  |  直到 16 年前
        1
  •  3
  •   adam0101    16 年前

    这是故意的。作为一种ASP.NET安全功能,在服务器上将其设置为只读将使其保持只读,无论客户端发生什么情况。如果您希望他们能够覆盖它并实际提交一个值,那么它在服务器上不是真正的只读,只是在客户端上有条件地。当他们选中复选框以更改服务器上的readonly属性时,您可以执行回发,也可以使用以下ASP.NET代码仅设置客户端上的readonly属性:

    MyControl.Attributes.Add("readOnly","readOnly")
    
        2
  •  0
  •   slava    9 年前

    好吧,我调整了我的样本,我想我看到了问题——我可能错了,但我认为它的行为符合预期。

    将codebehind上的字段设置为只读时 ASP:TextBox 即使是JS也似乎变得一成不变。我做了一个更改,该更改反映在JS和表单中,但TextBox保留了其原始文本值——除非我查看请求。和你一样。

    我不认为这是一个错误。我认为这是有意的,将某些内容完全锁定—服务器端的只读挂起似乎是首选。

    我可以建议使用隐藏的输入字段和跨距或 ASP:Labels (有效渲染为跨距)以提供用户无法调整的显示效果?

    或者,如果您可以访问JS库(如jQuery),则可以在文本框上设置CSS类(使用 CssClass="readonly" 或者类似于标记中的内容),然后使用选择过程来调整属性,如下所示(假设使用jQuery,很容易用其他语言编写):

    $("input.readonly").attr("readonly","readonly");