الحاجة إلى استدعاء .ClientID للحصول على .معرف لملء ويب التحكم

StackOverflow https://stackoverflow.com/questions/1203397

  •  05-07-2019
  •  | 
  •  

سؤال

أنا صنع أشكال إطار المشروع, و قد وجدت أن عند محاولة برمجيا تعيين AssociatedControlID الملكية asp:Label بها مربع نص علي أن أتصل ClientID للحصول على معرف لملء (لا تكون فارغة).

أثناء تصحيح هذا الاستخدام المتوسط نافذة تظهر المشكلة:

_inputTextBox.ID
null
_inputTextBox.ClientID
"ctl00_MainContent_ctl01"
_inputTextBox.ID
"ctl01"

(القيمة الحالية 2nd الوقت معرف ويسمى)

انا الإعداد _inputLabel.AssociatedControlID = _inputTextBox.معرف في تجاوز CreateChildControls(), و قد حاولت في RenderContents() من WebControl.

لقد حاولت التحميل ClientID إلى غير المستخدمة متغير temp الأولى, ويعمل, على سبيل المثال:

var x = _inputTextBox.ClientID;
_inputLabel.AssociatedControlID = _inputTextBox.ID;

يعطي:(صحيح)

<label for="ctl00_MainContent_ctl01">Name of customer</label>
<input type="text" id="ctl00_MainContent_ctl01" name="ctl00$MainContent$ctl01"/>

بدلا من:(غير صحيحة)

<span>Name of customer</span>
<input type="text" id="ctl00_MainContent_ctl01" name="ctl00$MainContent$ctl01"/>

سؤالي هو: - لماذا علي أن تنفيذ هذا الإختراق?هل هناك طريقة أفضل للحصول على معرف أن تكون موثوق بالسكان?

شكرا

هل كانت مفيدة؟

المحلول

أفضل شيء القيام به هو تعيين معرف على السيطرة على نفسك.إذا كنت لا أحد سوف تلقائيا إنشاء عندما الضوابط المحمية EnsureID طريقة يسمى.
هذا الأسلوب هو ما يسمى تلقائيا في أوقات مختلفة بما في ذلك ، ولكن ليس على سبيل الحصر ، عندما حاصل على ClientID يتم الوصول إليها.
يجب عليك أيضا أن تكون على علم أنه إذا كنت حيوي التلاعب الضوابط ثم فمن الممكن أن ديناميكيا معرفات يمكن أن تختلف على أساس الترتيب الذي يمكنك إضافة عناصر التحكم إلى الصفحة.
أيضا, حتى إذا لم تكن بشكل حيوي إنشاء عناصر التحكم التي تم إنشاؤها بشكل حيوي id يمكن أن تختلف إذا فرض هوية الجيل (طريق الوصول إلى ClientID) في ترتيب مختلف.

نصائح أخرى

معرف إنشاؤه بشكل حيوي الضوابط باطل إلا بوضوح حتى RenderControl ما يسمى طريقة.

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