如何在PostBack()之后保留只读文本框的文本
本文关键字:文本 只读 保留 之后 PostBack | 更新日期: 2023-09-27 18:09:55
我有一个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");
在页面加载上最好的最好的解决方案,而不是javascript,隐藏变量,缓存,cookie,会话&缓存。
使用Request.Form[txtDate.UniqueID]
获取值。你会得到的!!
我有过同样的问题,但使用Knockout绑定'enable'和ASP。Net Server Control Text.
:
<asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="value: city, enable: !hasZipCode()"></asp:TextBox>
然而,当提交表单时,这个字段的值总是空的。我认为,发生这种情况是因为如果控件被禁用,它就不会在ViewState链上持久存在。
我解决了用'attr{readonly: hasZipCode}'替换绑定'enable'
<asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="attr{ value: city, readonly: hasZipCode }">/asp:TextBox>
这是一种使用javascript在文本框本身的onfocus事件中实现它的方法。
用javascript这样做的好处是,你不需要在后台代码中做,如果你需要在gridviews或类似的代码中做,这可能是困难的。
这个javascript代码只在IE上测试,它的某些部分只在IE上工作,比如createTextRange部分,它只是让插入符号结束在文本框的开头,但如果不需要,那部分可以跳过。
如果该技术的核心可以在其他浏览器上工作,那么应该可以使代码跨浏览器。这里的核心思想是设置只读后的模糊,然后再超时设置焦点。
如果你只设置只读,那么它不会变成只读,直到下次你给文本框焦点。
当然,这些代码也可以放到一个函数中,并以"this"作为参数调用。
<asp:TextBox
ID="txtSomething"
runat="server"
Text='<%# Bind("someData") %>'
onfocus="
var rng = this.createTextRange();
rng.collapse();
rng.select();
if (this.allowFocusevent=='0') {return;};
this.allowFocusevent='0';
this.readOnly=true;
this.blur();
var that=this;
setTimeout(function(){that.focus()},0);
"
/>
设置文本框的ContentEditable属性为false。它不允许你编辑文本框的内容将文本框设置为只读还将使值在回发后留在文本框中。我认为这是最简单的方法……