Как сохранить текст только для чтения текстового поля после PostBack ()? - PullRequest
29 голосов
/ 27 сентября 2011

У меня есть ASP.NET TextBox, и я хочу, чтобы он был ReadOnly.(Пользователь изменяет его, используя другой элемент управления)

Но когда есть PostBack(), текст сбрасывается в пустую строку.

Я понимаю, что если вы установите свойство ReadOnlyв True из TextBox его содержимое не сохраняется через PostBack().

Есть ли способ сохранить содержимое после PostBack() и сделать TextBox недоступным для редактирования пользователем?

Я попытался установить для свойства Enabled значение False, но содержимое не сохраняется после PostBack().

Ответы [ 7 ]

57 голосов
/ 01 октября 2011

Другое решение, которое я нашел, и более простое:

Добавьте это к методу загрузки страницы:

protected void Page_Load(object sender, EventArgs e)
{
     TextBox1.Attributes.Add("readonly", "readonly");
}
6 голосов
/ 27 сентября 2011

Пусть ваш другой элемент управления сохранит значение в скрытом поле, а при обратной передаче извлекает значение из скрытого поля и вставляет его в текстовое поле на стороне сервера.

2 голосов
/ 24 февраля 2012

txtStartDate.Attributes.Add("readonly", "readonly"); при загрузке страницы в лучших из лучших решений вместо Javascripts, скрытых переменных, кэша, файлов cookie, сеансов и кэшей.

1 голос
/ 11 апреля 2014

Получить значение с помощью Request.Form[txtDate.UniqueID]. Вы получите это!

0 голосов
/ 23 апреля 2015

Вот способ сделать это с помощью javascript в событии onfocus самого Textbox.

Выполнение этого с помощью javascript имеет то преимущество, что вам не нужно делать это в коде позади, что может быть сложно, если вам нужно сделать это в gridviews или подобном.

Этоjavascript-код тестируется только в Internet Explorer, и некоторые его части будут работать только в IE, как, например, часть createTextRange, которая предназначена только для того, чтобы каретка оказалась в начале текста в текстовом поле, но эта часть может бытьпропущено, если не нужно.

Если ядро ​​этой техники работает в других браузерах, то должна быть возможность сделать код кросс-браузерным.Суть идеи здесь - размытие после установки только для чтения, а затем тайм-аут, чтобы снова установить фокус.

Если вы устанавливаете только чтение только тогда, оно не становится доступным только для чтения, пока в следующий раз вы не выделите текстовое поле.

И, конечно, код можно поместить в функцию, которая вызывается с помощью "это "как аргумент.

  <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);
"
  />
0 голосов
/ 10 сентября 2014

У меня была такая же проблема, но я использовал привязку 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.

Я решил заменить bindig 'enable' на 'attr {readonly: hasZipCode}'

    <asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="attr{ value: city, readonly: hasZipCode }">/asp:TextBox>
0 голосов
/ 10 апреля 2012

Установите для свойства ContentEditable текстового поля значение false ContentEditable = "false". Это не позволит вам редактировать содержимое текстового поля, т. Е. Сделает текстовое поле доступным только для чтения, а также оставит значение в текстовом поле после обратной передачи.Я думаю, что это самый простой способ сделать это ..

...