실수로 외국인의 블로그에서 이 설명을 보았습니다. 텍스트 상자 컨트롤이 읽기 전용으로 설정되어 있고 페이지의 활성화 보기 상태가 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 ">
<스크립트 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>
</head>
<본문>
<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>
</body>
</html>
.net 2.0에서 실행하면 텍스트 상자의 값이 실제로 손실됩니다. 마지막으로 MSDN 분석과 Microsoft의 BUG 피드백 센터를 찾았습니다. 사실 이것은 BUG는 아니지만 .net 2.0에서의 보안에 대한 작은 변경 사항은 다음과 같으므로 누구나 이해할 수 있습니다.
Microsoft의 피드백은 다음과 같습니다.
신중하게 분석한 후 관찰된 동작에 대한 설명은 다음과 같습니다.
사용자 보안 문제를 기반으로 한 ASP .NET의 디자인 변경으로 인해 읽기 전용 텍스트 상자에 대한 입력은 viewstate에 저장됩니다. 이 문제를 해결하려면 페이지 개발자가 TextBox에 읽기 전용 특성을 추가하면 됩니다. .속성 컬렉션은 텍스트 상자의 '값'에 액세스하는 데 사용할 수 있습니다.
감사합니다.
웹 서버 및 도구
MSDN 2005 분석:
ReadOnly 속성이 true로 설정된 TextBox 컨트롤의 Text 값은 포스트백이 발생할 때 서버로 전송되지만 서버는 읽기 전용 텍스트 상자에 대해 처리를 수행하지 않습니다. 이렇게 하면 악의적인 사용자가 Text 값을 변경하는 것을 방지할 수 있습니다. 읽기 전용입니다. Text 속성의 값은 서버 측 코드로 수정되지 않는 한 포스트백 사이의 보기 상태에 유지됩니다.
출처: jackyron 블로그