ฉันเห็นคำอธิบายนี้โดยไม่ได้ตั้งใจในบล็อกของชาวต่างชาติ เมื่อตั้งค่าการควบคุมกล่องข้อความเป็นแบบอ่านอย่างเดียวและตั้งค่า Enableviewsate ของเพจเป็นเท็จ ค่าของกล่องข้อความจะหายไปหลังจากการส่ง สิ่งนี้จะเกิดขึ้นใน asp.net 2.0 เท่านั้น สถานการณ์จะไม่เกิดขึ้นใน asp.net 1.0/1.1 รหัสจะเป็นดังนี้:
<%@ ภาษาเพจ = "C#" AutoEventWireup = "true" CodeFile = "Default.aspx.cs" EnableViewState = "false" สืบทอด = "_Default" %>
<! DOCTYPE html PUBLIC "-// W3C//DTD XHTML 1.0 เฉพาะกาล//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<script runat="เซิร์ฟเวอร์">
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
{
if (!this.IsPostBack)
{
this.Textbox1.Text = "ข้อความแบบอ่านอย่างเดียว";
}
}
โมฆะที่ได้รับการป้องกัน Button1_Click (ผู้ส่งวัตถุ EventArgs e)
{
this.lblMessage.Text = สิ่งนี้ .Textbox1.Text;
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<หัว 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 และศูนย์ตอบรับ BUG ของ Microsoft อันที่จริงนี่ไม่ใช่ BUG แต่เป็นการเปลี่ยนแปลงเล็กน้อยเพื่อความปลอดภัยภายใต้ .net 2.0 ข้อความที่ตัดตอนมาโดยเฉพาะมีดังนี้ ดังนั้นทุกคนจะเข้าใจ:
ข้อเสนอแนะของ Microsoft คือ:
หลังจากวิเคราะห์อย่างรอบคอบแล้ว คำอธิบายพฤติกรรมที่สังเกตได้คือ:
ด้วยการเปลี่ยนแปลงการออกแบบใน ASP .NET ตามข้อกังวลด้านความปลอดภัยของผู้ใช้ ข้อมูลป้อนเข้าสำหรับกล่องข้อความแบบอ่านอย่างเดียวจะถูกบันทึกใน viewstate ซึ่งจะไม่เกิดขึ้นหาก viewstate ถูกปิดใช้งาน เมื่อต้องการแก้ไขปัญหานี้ นักพัฒนาเพจสามารถเพิ่มแอตทริบิวต์แบบอ่านอย่างเดียวลงในกล่องข้อความได้
ใน
การเข้าถึง 'value' ของ textbox ได้
เว็บเซิร์ฟเวอร์และเครื่องมือ
การวิเคราะห์ MSDN 2005:
ค่าข้อความของตัวควบคุมกล่องข้อความที่มีคุณสมบัติอ่านอย่างเดียวที่ตั้งค่าเป็นจริงจะถูกส่งไปยังเซิร์ฟเวอร์เมื่อมีการส่งกลับเกิดขึ้น แต่เซิร์ฟเวอร์ไม่มีการประมวลผลสำหรับกล่องข้อความแบบอ่านอย่างเดียว ซึ่งจะป้องกันไม่ให้ผู้ใช้ที่เป็นอันตรายเปลี่ยนค่าข้อความที่เป็น อ่านอย่างเดียว ค่าของคุณสมบัติ Text จะถูกเก็บไว้ในสถานะมุมมองระหว่าง postbacks เว้นแต่จะมีการแก้ไขโดยโค้ดฝั่งเซิร์ฟเวอร์
ที่มา: บล็อก jackyrong