Я случайно увидел это описание в блоге иностранца. Когда для элемента управления текстовым полем установлено значение «только для чтения», а для параметра Enableviewsate страницы установлено значение false, значение текстового поля будет потеряно после отправки. Это происходит только в asp.net 2.0. ситуация не произойдет в asp.net 1.0/1.1, код следующий:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" EnableViewState="false" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Переходный//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="сервер">
protected void Page_Load(отправитель объекта, EventArgs e)
{
if (!this.IsPostBack)
{
this.Textbox1.Text = "текст только для чтения"
}
}
protected void Button1_Click (отправитель объекта, EventArgs e)
{
this.lblMessage.Text = this .Textbox1.Text
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="сервер">
<title>Страница без названия</title>
</голова>
<тело>
<form runat="server" id="Form1">
<asp:textbox ID="Textbox1" runat="server" ReadOnly="true" ForeColor="silver"></asp:textbox>
<asp:textbox ID= "Textbox2" runat="server" ReadOnly="true">Некоторый текст</asp:textbox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
<asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label>
</form>
</тело>
</html>
При работе в .net 2.0 значение текстового поля действительно будет потеряно. Наконец, я нашел анализ MSDN и центр отзывов об ошибках Microsoft. На самом деле это не ошибка, а небольшое изменение безопасности в .net 2.0. Конкретный отрывок таков, чтобы все поняли:
Отзыв Microsoft таков:
После тщательного анализа наблюдаемое поведение объясняется следующим образом:
Благодаря изменению дизайна в ASP .NET, основанному на соображениях безопасности пользователя, входные данные для текстового поля только для чтения сохраняются в состоянии просмотра, чего не происходит, если состояние просмотра отключено. Чтобы обойти эту проблему, разработчик страницы может добавить атрибут только для чтения в TextBox. Коллекция .Attributes, которую затем можно использовать для доступа к «значению» текстового поля.
Надеемся, это прояснило ситуацию. Спасибо.
Веб-сервер и инструменты
Анализ MSDN 2005:
Значение Text элемента управления TextBox со свойством ReadOnly, имеющим значение true, отправляется на сервер при возникновении обратной передачи, но сервер не обрабатывает текстовое поле, доступное только для чтения. Это не позволяет злоумышленнику изменить значение Text, которое является доступным только для чтения. только для чтения. Значение свойства Text сохраняется в состоянии просмотра между обратными передачами, если оно не изменено серверным кодом.
Источник: блог Jackyrong