في إصدارات ASP.NET 1.x السابقة، لا يزال بإمكان عنصر التحكم TextBox الذي تم تعيينه إلى ReadOnly الحصول على القيمة المعدلة من جانب الخادم بعد تغيير القيمة من جانب العميل، ومع ذلك، في ASP.NET 2.0، تم تقييد هذه الممارسة. . يعتبر هذا لتحسين أمان التطبيق. فيما يلي الطريقة الداخلية لعنصر تحكم TextBox للحصول على البيانات، والتي يمكننا من خلالها رؤية قيود القراءة فقط:
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
base.ValidateEvent(postDataKey);
سلسلة text1 = this.Text;
string text2 = postCollection[postDataKey];
إذا (!this.ReadOnly && !text1.Equals(text2, StringComparison.Ordinal))
{
this.Text = text2;
عودة صحيحة؛
}
عودة كاذبة.
}
ما هو مقيد هنا هو سمة النص فقط، وليس هناك أي قيود على NameValueCollection لاسم/قيمة البيانات المرسلة، لذلك، لا يزال من الممكن الحصول على القيمة من خلال طريقة Request["Form Name"]. يوضح المثال التالي هذه النقطة بشكل كامل ويوفر طريقة لاستخدام القراءة فقط والحصول على القيمة من خلال خاصية النص:
<%@ 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">
محمي باطل 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]);
}
Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
{
TextBox3.Attributes.Add("readonly", "readonly");
}
</script>
<script type="text/javascript">
//<![CDATA[
الدالة SetNewValue()
{
document.getElementById('<%=TextBox1.ClientID %>').value = "TextBox1 new Value";
document.getElementById('<%=TextBox2.ClientID %>').value = "TextBox2 new Value";
document.getElementById('<%=TextBox3.ClientID %>').value = "TextBox3 new Value";
}
//]]>
</script>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<رئيس تشغيل = "الخادم">
<title>عنصر التحكم TextBox وخصائص ReadOnly وEnabled في ASP.NET 2.0</title>
</الرأس>
<الجسم>
< معرف النموذج = "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 القيمة القديمة"></asp:TextBox><br />
<br />
<asp:Button ID="Button2" runat="server" Text="Modify new value" OnClientClick="SetNewValue();return false; />
<asp:معرف الزر = "Button1" runat = "الخادم" Text = "إرسال" OnClick = "Button1_Click" />
</النموذج>
</ الجسم>
</html>
بالنسبة إلى TextBox المعطل، لا يمكن الحصول على القيمة المعدلة من جانب الخادم. إذا كنت تريد حقًا استخدام هذه السمة، فاستخدم طريقة إخفاء حقل النموذج لتحقيق ذلك.
سيتم عرض TextBox مع السمة للقراءة فقط كعلامة من جانب العميل:
<input readonly = "readonly">
سيتم عرض TextBox مع السمة Enabled كعلامة من هذا القبيل على جانب العميل: <input Disabled = "disabled" ">
وفقًا لمواصفات W3C: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12
سيكون للإدخال الذي تم تعيينه على "تعطيل" القيود التالية:
· لا يمكن تلقي التركيز · سيتم تخطيه عند استخدام مفتاح tab · قد لا
تحتوي المدخلات الناجحة التي تم ضبطها على القراءة فقط على القيود التالية:
· يمكن أن تتلقى التركيز ولكن لا يمكن تعديلها · يمكن استخدام مفتاح tab للتنقل · قد تكون ناجحة
فقط عناصر النموذج الناجحة هي بيانات صالحة، أي، يمكن تقديمها . لا يمكن تعديل سمة القيمة لمربعات إدخال النص المعطلة أو المخصصة للقراءة إلا من خلال البرامج النصية.