检索asp:TextBox的值

时间:2009-04-29 15:49:12

标签: c# .net javascript

我有一个禁用的TextBox,我正在使用JavaScript编辑客户端的值。当我尝试在服务器端检索值时,它不反映客户端上所做的更改。如果我将TextBox的enabled属性设置为true,我可以检索该值,但是用户可以放置焦点并编辑TextBox。

是否有一种理智的方法可以阻止用户对TextBox进行聚焦和编辑?

2 个答案:

答案 0 :(得分:6)

使用文本框的ReadOnly属性。

编辑:根据OP的评论,这可能不会起到作用。

编辑2 :来自DotNetSlackers:

  

那么这些之间的区别是什么   两个属性,为什么两者都存在?   两者之间有两点不同   这两个属性,一个微不足道的   差异和微妙,深刻的一个:

     
      
  1. 这两个属性会发出不同的标记。设置已启用时   为False,TextBox注入了   属性disabled =“disabled”intoits   呈现HTML。当你设置   ReadOnly属性为True,the   属性readonly =“readonly”是   注入。
  2.   
  3. 根据HTML表单上的W3C规范,禁用控件不是   “成功”,而只读控件   可能会“成功”。一个成功的”   控件是其名称/值对的控件   通过发送回浏览器   POST标头或查询字符串。   因此,禁用控件不是   发送回ASP.NET页面的同时   根据,只读控件可能是   在用户代理上。 (在我的测试中,两者都有   IE 6和FireFox 1.5一起发送   只读TextBox输入。)
  4.         

    ...

         

    如果您遇到此问题   您可能拥有的ASP.NET 1.x版   找到了TextBox的ReadOnly属性   并使用它而不是设置   启用为假。你还可以   页面的ViewState已禁用并设置了一个   只读TextBox Web控件的文本   属性编程因为   TextBox值通过发回   表单提交为只读   控制。但是,在ASP.NET版本中   2.0,Rick Strahlin在他的博客文章中指出,事情发生了一些变化   ASP.NET 2.0 ReadOnly行为更改   当EnableViewState为false时。同   2.0,TextBox control'sReadOnly属性的行为已经改变   略。来自技术文档:

发生回发时,将ReadOnly属性设置为true的TextBox控件的Text值发送到服务器,但服务器不对只读文本框进行处理。这可以防止恶意用户更改只读的Text值。除非由服务器端代码修改,否则Text属性的值将保留在回发之间的视图状态中。

  

客户发送的是什么   沿着只读的价值   TextBox通过表单值,但是   ASP.NET 2.0引擎不需要   该值并将其分配给文本   回发到的TextBox的属性   帮助防范恶意用户   更改只读TextBox值   他们自己。但这让我们回到了原点   我们早先的问题 - 如果价值   没有在回发中指定(或者是   忽略,在这种情况下)和ViewState   被禁用,该值将丢失。   EEP。

     

Rick的工作只是手动   从请求中读取值   标题(此.TextBox1.Text =   请求[this.TextBox1.UniqueID]),   这会带来安全风险   介绍2.0的问题   地址。最佳方法是   从数据库中重新查询值   (或者你最初得到的地方   以编程方式设置的值   只读TextBox)。

     

这篇博文的寓意是,如果   你有可以使用的只读数据   禁用或只读形式   字段,真的没关系   你是否收到了   表单中表单字段的值   意见书。没关系   因为你不应该   信任/使用该数据开始   有!如果您有只读数据,   不要从数据流中重新读取它   最终用户可以修改!

Source

答案 1 :(得分:5)

正如您所发现的,浏览器不会在禁用的输入控件中发布值。解决此问题的最简单方法可能是挂钩表单提交,并在提交表单时重新启用输入;用户将无法编辑该值,并且应该使用剩余的请求发布。

另一种方法是将隐藏元素注入表单中;这可以通过您的脚本维护,镜像显示的值,或者以与上面类似的方式添加到最后。