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

时间:2011-09-27 14:17:08

标签: c# asp.net textbox postback readonly

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

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

我了解如果您将ReadOnly属性设置为True的{​​{1}},则其内容不会通过TextBox保存。

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

我尝试将TextBox属性设置为Enabled,但在False之后内容仍未保存。

7 个答案:

答案 0 :(得分:56)

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

将此添加到Page Load方法:

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

答案 1 :(得分:6)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我遇到了同样的问题但使用了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}'替换bindig'enable'的问题

    <asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="attr{ value: city, readonly: hasZipCode }">/asp:TextBox>

答案 5 :(得分:0)

这是在文本框本身的onfocus事件中使用javascript进行此操作的方法。

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

此javascript代码仅在Internet Explorer上进行测试,其某些部分仅适用于IE,例如createTextRange部分,只是为了使插入符号最终位于文本框中文本的开头,但是如果不需要,可以跳过该部分。

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

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

当然,代码可以放入一个函数中,而不是以“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);
"
  />

答案 6 :(得分:-1)

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