Подтвердить что ты не робот

Как сохранить текст только для чтения TextBox после PostBack()?

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

Но когда есть PostBack(), текст получает reset в пустую строку.

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

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

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

4b9b3361

Ответ 1

Еще одно решение, которое я нашел и более простой:

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

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

Ответ 2

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

Ответ 3

txtStartDate.Attributes.Add("readonly", "readonly"); в pageload в лучших лучших решениях вместо Javascripts, скрытых переменных, кеш, куки, сеансах и кэшах.

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

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

Если вы только устанавливаете readonly, то он не переходит в readonly, пока следующий раз, когда вы отдаете фокус Textbox.

И, конечно, код можно поместить в функцию, которая вызывается с аргументом "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);
"
  />

Ответ 7

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