سؤال

لدي بسيط جدا 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 يجري تعقب مثل في تحميل الصفحة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top