如何在PostBack()之后保留只读TextBox的文本?
我有一个ASP.NET TextBox
,我希望它是ReadOnly
。 (用户使用其他控件修改它)
但是当有PostBack()
,文本会重置为空字符串。
据我所知,如果将ReadOnly
属性设置为TextBox
的True
,则其内容不会通过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”..它不允许您编辑文本框的内容即;将使文本框只读,并且还将使值保留在文本框中后回发..我认为它这是最简单的方法..