UserControl النص لن الحفاظ على الدولة
-
22-08-2019 - |
سؤال
لدي بسيط جدا usercontrol في الأساس مربع نص و التسمية ، الذي يهدف إلى تبديل بين بعضها البعض.عنصر التحكم منضما خلال الصفحة Page_Load event
.على UserControl هو Page_Load
الحدث أسميه تبديل وظيفة() الذي يظهر أو يخفي رقابة ملائمة و يحدد النص على أساس منطقية للتحرير الممتلكات سلسلة النص الملكية ، على التوالي.
هنا هو بلدي تبديل طريقة () (تذكر للتحرير و النص الممتلكات العامة):
Public Sub Toggle()
If Editable Then
txtText.Visible = True
lblText.Visible = False
txtText.Text = Text
txtText.CssClass = TextboxCSSClass
Else
txtText.Visible = False
lblText.Visible = True
lblText.Text = Text
lblText.CssClass = LabelCSSClass
End If
End Sub
مشكلتي هي أيضا بسيطة:عندما زر على الصفحة يدعو التحكم تبديل() طريقة تبديل يعمل بشكل جيد, ولكن النص يختفي!لقد حاولت ذلك مع العادي مربع نص غير منضم المقبل ، النص يحافظ على قيمة النص على ما يرام.هل هناك شيء أنا في عداد المفقودين ؟
شكرا على المساعدة مسبقا.
المحلول 2
وأنا أحسب من ذلك! أعتذر لكونه البكم. إليك ما كنت أفعله خطأ: تم يتم تخزين بلدي الحصول على / تعيين لخاصية النص في عضو الخاص. وهذا يعني أنه عندما تم إجراء التحديثات على النص، فإنه لم يكن يعرف، لأنه لم يكن مرتبطا مربع النص. بدلا من ذلك، فعلت ما يلي:
Public Property Text() As String
Get
Return txtText.Text
End Get
Set(ByVal value As String)
txtText.Text = value
End Set
End Property
ووفي بلدي الحدث Page_Load:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
lblText.Text = Text
Toggle()
End If
End Sub
والآن يعمل بشكل جيد! وبفضل تلك التي وضعني على الطريق الصحيح! :)
نصائح أخرى
وعند تعيين الخاصية مرئي لعنصر تحكم إلى خطأ، فإنه لن يتم تقديمها في الاكواد وبالتالي فإنه لا يمكن أن تحمل الدولة بين الصفحات. النظر بدلا من ذلك استخدام وسائل منع بطرق عرض متعددة
تحديث: مزيد من المعلومات فيما يتعلق التعليقات.
إذا كان لديك viewstate تعطيل تعيين النص مربعات النص, النص في عنصر تحكم الإدخال.هذا يمكن أن تؤثر عليك في غير المألوف السيناريو عندما تحاول معرفة ما إذا كان إعطاء النص قيمة تغيرت.
أعلاه هو مختلف عن التسمية ، إذ ليس عنصر تحكم الإدخال.مع viewstate تعطيل إذا كنت لا تضع النص على كل طلب ، وسوف تظهر القيمة الأولية (جربه).على viewstate ما تلقائيا يسمح للحفاظ على المعلومات عبر postbacks عن الضوابط.
تماما كما يحدث مع التسمية ، يحدث مع المستخدم من التحكم.إذا قمت بتغيير اضع لذلك ويضع ضوابط النصوص مباشرة, أنها سوف تبقي القيمة في الضوابط الداخلية إذا كنت تستخدم viewstate.إذا كنت إيقاف تشغيله ، فإنه التصرف تختلف التسمية من مربع النص.
نلاحظ أيضا أن إيقاف viewstate سوف يؤثر أيضا الخاص بك مرئية التكوين.أنتقل viewstate الكثير ، ولكن قد يكون السيناريو حيث كنت تريد حقا أن نضع الضوابط المعلومات عبر postbacks.عند إيقاف viewstate ، تحتاج إلى تأكد دائما تكوين الضوابط ، ليس فقط عندما !IsPostBack.
ملاحظة أنه إذا كنت تتبع ما هو من المفترض أن تكون واضحة و نص في التعليمات البرمجية الخاصة بك, ثم يمكنك إيقاف الداخلية التحكم viewstate (على افتراض انك لا يتم تعيين أي ممتلكات أخرى لهم).
الأولي الجواب:
تم تعيين القيمة الحالية الخاصية Text إلى التسمية/مربع نص.إذا لم يتم تعيين القيمة في الطلب الحالي ، ثم فقد قيمته الافتراضية ، وبالتالي يتم الحصول على نص فارغ.
يمكنك حفظ القيمة في viewstate مثل (c# بناء الجملة):
public string Text
{
get
{
return (string) ViewState["MyText"];
}
set
{
ViewState["MyText"] = value;
}
}
Ps.هذه ليست الطريقة الوحيدة للقيام بذلك.إذا كان تبديل لم يحدد النص ، ولكن يمكنك فعل ذلك على واضع لكل الضوابط ، ثم أنها سوف تبقى القيم (طالما يمكنك تعيين الخاصية Text لعنصر تحكم المستخدم بعد viewstate يجري تعقب مثل في تحميل الصفحة).