如何在PostBack()之后保留只读TextBox的文本?

我有一个ASP.NET TextBox ,我希望它是ReadOnly 。 (用户使用其他控件修改它)

但是当有PostBack() ,文本会重置为空字符串。

据我所知,如果将ReadOnly属性设置为TextBoxTrue ,则其内容不会通过PostBack()保存。

有没有办法在PostBack()之后保留内容并使TextBox不能被用户编辑?

我试图将Enabled属性设置为False ,但是在PostBack()之后内容仍然没有保存。

我发现的另一种解决方案更容易:

将其添加到Page Load方法:

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

让您的其他控件将值存储在隐藏字段中,并在回发时,从隐藏字段中提取值并将其推入服务器端的文本框中。

txtStartDate.Attributes.Add("readonly", "readonly"); 在页面加载最好的解决方案,而不是Javascripts,隐藏变量,缓存,cookie,会话和缓存。

使用Request.Form[txtDate.UniqueID]获取值。 你会得到的 !!

我有同样的问题,但使用Knockout绑定’启用’和ASP.Net服务器控制文本。

这条路:

  

但是,提交表单时,此字段值始终为空。 我认为这发生了,因为如果控件被禁用,它就不会在ViewState链上持久存在。

我解决了’attr {readonly:hasZipCode}’替换bindig’enable’的问题

  /asp:TextBox> 

这是一种在文本框本身的onfocus事件中使用javascript的方法。

使用javascript这样做的好处是你不需要在后面的代码中执行它,如果你需要在gridviews或类似的代码中执行它,这可能很困难。

这个javascript代码仅在Internet Explorer上进行测试,并且它的某些部分仅适用于IE,例如createTextRange部分,只是为了使插入符号在文本框中的文本开头处结束,但该部分可以如果不需要,可以跳过。

如果此技术的核心适用于其他浏览器,则应该可以使代码跨浏览器。 这里的想法的核心是设置只读后的模糊,然后再次设置焦点的超时。

如果您只设置只读,那么在下次给出Textbox焦点之前它不会成为只读。

当然,代码可以放入函数中,而使用“this”作为参数调用。

   

将文本框的ContentEditable属性设置为false ContentEditable =“false”..它不允许您编辑文本框的内容即;将使文本框只读,并且还将使值保留在文本框中后回发..我认为它这是最简单的方法..