이전 ASP.NET 1.x 버전에서는 ReadOnly로 설정된 TextBox 컨트롤이 클라이언트 측에서 값이 변경된 후에도 서버 측에서 수정된 값을 가져올 수 있었습니다. 그러나 ASP.NET 2.0에서는 이 방식이 제한되었습니다. . 이는 애플리케이션 보안을 향상시키는 것으로 간주됩니다. 다음은 ReadOnly의 제한 사항을 볼 수 있는 데이터를 얻기 위한 TextBox 컨트롤의 내부 메서드입니다.
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
base.ValidateEvent(postDataKey);
문자열 텍스트1 = this.Text;
문자열 텍스트2 = postCollection[postDataKey];
if (!this.ReadOnly && !text1.Equals(text2, StringComparison.Ordinal))
{
this.Text = text2;
사실을 반환;
}
거짓을 반환;
}
여기서 제한되는 것은 Text 속성뿐이며 제출된 데이터의 이름/값에 대한 NameValueCollection에는 제한이 없으므로 여전히 Request["Form Name"] 메소드를 통해 값을 얻을 수 있습니다. 다음 예에서는 이 점을 자세히 설명하고 ReadOnly를 사용하고 Text 속성을 통해 값을 얻는 방법을 제공합니다.
<%@ Page Language="C#" EnableViewState="false" %>
<!DOCTYPE html PUBLIC "-/ /W3C/ /DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="server">
protected void Button1_Click(object sender , EventArgs e )
{
Response.Write("<li>TextBox1 = " + TextBox1.Text);
Response.Write("<li>TextBox2 = " + TextBox2.Text);
Response.Write("<li>TextBox3 = " + TextBox3.Text);
Response.Write("<li>Request.Form[TextBox1] = " + Request.Form[TextBox1.UniqueID]);
Response.Write("<li>Request.Form[TextBox2] = " + Request.Form[TextBox2.UniqueID]);
Response.Write("<li>Request.Form[TextBox3] = " + Request.Form[TextBox3.UniqueID]);
}
protected void Page_Load(객체 전송자, EventArgs e)
{
TextBox3.Attributes.Add("읽기 전용", "읽기 전용");
}
</script>
<스크립트 유형="텍스트/자바스크립트">
//<![CDATA[
함수 SetNewValue()
{
document.getElementById('<%=TextBox1.ClientID %>').value = "TextBox1 새 값";
document.getElementById('<%=TextBox2.ClientID %>').value = "TextBox2 새 값";
document.getElementById('<%=TextBox3.ClientID %>').value = "TextBox3 새 값";
}
//]]>
</script>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<헤드 runat="서버">
<title>ASP.NET 2.0의 TextBox 컨트롤과 ReadOnly 및 Enabled 속성</title>
</머리>
<본문>
<양식 id="form1" runat="서버">
<span>TextBox1 읽기 전용:</span>
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" Text="TextBox1 Old Value"></asp:TextBox><br />
<span>TextBox2 활성화:</span>
<asp:TextBox ID="TextBox2" runat="server" Enabled="False" Text="TextBox2 Old Value"></asp:TextBox><br />
<span>TextBox3 읽기 전용:</span>
<asp:TextBox ID="TextBox3" runat="server" Text="TextBox3 Old Value"></asp:TextBox><br />
<br />
<asp:Button ID="Button2" runat="server" Text="새 값 수정" OnClientClick="SetNewValue();return false;"
<asp:Button ID="Button1" runat="server" Text="제출" OnClick="Button1_Click" />
</양식>
</본문>
</html>
비활성화된 TextBox의 경우 수정된 값을 서버 측에서 얻을 수 없습니다. 이 속성을 실제로 사용하려면 양식 필드를 숨기는 방법을 사용하세요.
ReadOnly 속성이 있는 TextBox는 클라이언트 측에 다음과 같은 표시로 표시됩니다:
<input readonly = "readonly">
Enabled 속성이 있는 TextBox는 클라이언트 측에 다음과 같은 표시로 표시됩니다: <input 비활성화="비활성화" ">
W3C 사양에 따름: http:/ /www.w3.org/TR/REC-html40/interact/forms.html#h-17.12
비활성화로 설정된 입력에는 다음과 같은 제한 사항이 있습니다.
· 포커스를 받을 수 없음 · 건너뛰게 됩니다. 탭 키를 사용할 때 · 성공하지 못할 수 있음
읽기 전용으로 설정된 입력에는 다음과 같은 제한 사항이 있습니다.
· 포커스를 받을 수 있지만 수정할 수는 없습니다. · 탭 키를 사용하여 탐색할 수 있습니다. · 성공할 수 있습니다.
성공적인 양식 요소만 유효한 데이터입니다. 제출할 수 있습니다. 비활성화되고 읽기 전용 텍스트 입력 상자의 값 속성은 스크립트를 통해서만 수정할 수 있습니다.