PDA

View Full Version : کلیدهای درون یوزر کنترل لود شده کار نمی کنند(تکراری.ولی جدید)



Chabok
جمعه 07 مهر 1385, 05:18 صبح
با عرض سلام خدمت تمامی دوستان و تمامی کسانی که برای برنامه نویس زحمت میکشند .
قبل از هر چیز عرض کنم که در تاریخ یکشنبه 06 فروردین 1385 تاپیکی با همین عنوان توسط
آقای mirza مطرح شده بود . اینم لینکش :

http://barnamenevis.org/forum/showthread.php?t=41571

سوال ایشون دقیقا این بود :


من داخل یه یوزر کنترل چند تا button دارم این یوزر کنترلو به صورت پویا به فرمم اضافه میکنم
حالا با کلیک این دکمه ها رویدادشون اجرا نمیشه یوزر کنترلم هم از رو صفحه پاک میشه
ممنون میشم از دوستان باتجربه اگه راهنماییم کنن
ولی متاسفانه دوستانی که جواب داده بودند اشتباه متوجه شده بودند و فکر میکردند که دوستمون
کلید را به صورت داینامیک به فرم اضافه می کنند و طریق Handeling رو بیان کرده بودند .

در صورتیکه این آقا یوزرکنترلی رو که کلیدها از قبل روش بوده بصورت بصورت پویا به فرم اضافه میکنند .
و سرانجام این تاپیک بدون جواب پایان یافت .

این همه رو نوشتم برای اینکه نشون بده از جستجوی سایت استفاده کردم . ولی متاسفانه جوابی نداشت.:خجالت:
حالا از دوستانی که جواب رو میدونند تقاضا دارم کمکی بفرمایند . از همگی ممنونم .

SalarSoft
جمعه 07 مهر 1385, 08:25 صبح
خیلی خیلی ساده.
اگر یوزر کنترل درون صفحه با تگ معرفی شده باشد (یعنی اینطوری <uc:MyControl و...) اصولا نباید هیچ مشکلی داشته باشید.

اما اگر کنترل رو با استفاده از Page.LoadControl به صفحه اضافه می کنید تنها کاری که واقعا لازم است انجام بدید انجام آن در درون CreateChildControls است.





protected override void CreateChildControls()
{
base.CreateChildControls();

Control ctrl;
ctrl=Page.LoadControl("usercontrols.ascx");

if(ctrl!=null)
this.Controls.Add( ctrl);

}

nazaninam
جمعه 07 مهر 1385, 12:34 عصر
من یادم نیست کی ولی یه زمانی این مشکل برام بوجود اومد که میخوستم یک سری تکس باکس رو به تعدادی که کاربر انتخاب می کنه به یک place holder در فرمم اضافه کنم
این کارو انجام میدادم ولی وقتی صفحه post back میشد همه تکس باکس ها می پریدن... البته دات نت 2 بود

مشکل از place holder بود
برای حل شدن مشکل از کنترلی که پیوست کردم به جای place holder استفاده کنید تا مشکل حل بشه...
البته بگم شاید این گفته من به این تاپیک کمی بی ربط باشه درحقیقت این برای کسانیه که با اضافه کردن کنترل به place holder یا panel مشکل دارن...

Chabok
شنبه 08 مهر 1385, 04:39 صبح
ممنونم از اینکه جواب دادین .
راستش آقای سالار من به VB مینویسم و Base رو نمیشناسه . همون Me هستش ؟

و باید عرض کنم من نتونستم از کنترل Bin.rar . نازنینم استفاده کنم .
خیلی خیلی ممنون و سپاسگزار .

اول فکر کردم حل شده . ولی به مشکل برخوردم .ممنون

Chabok
شنبه 08 مهر 1385, 05:53 صبح
لازم میدونم موارد زیر رو عرض کنم .

راستش من هم دستور Me.CreateChildControls آقای سالار رو استفاه کردم
و هم یوزر کنترل را از طریق کنترل Nazaninam اضافه کردم . ولی هنوز هیچ تغییری صورت نمیگیره
و یوزر کنترل هم از روی صفحه پاک میشه .

خیلی ممنونم.

SalarSoft
شنبه 08 مهر 1385, 19:34 عصر
این هم به زبان VB :


protected overrides sub CreateChildControls()

mybase.CreateChildControls()

dim ctrl as Control
ctrl=Page.LoadControl("usercontrols.ascx");

if(ctrl isnot null) then me.Controls.Add( ctrl)

end sub


لازم به ذکره بگم که این تابع قبل از Load اجرا میشه به همین خاطر کنترل جدید از هر لحاظ محیا است.
در ضمن یه نکته خیلی مهم اگه این کارها داری تو یه CustomControl انجام میدی حتما باید اینترفیس INamingContainer رو پیاده سازی کنی.

Chabok
یک شنبه 09 مهر 1385, 05:03 صبح
جناب سالار .
از شما ممونم . ولی مشکل زیر بوجود میاد .


Control 'ctl00_Nam' of type 'TextBox' must be placed inside a form tag with runat=server.


این تکست باکس Nam روی همون یوزر کنترلی است که عرض کردم میخواد لود بشه .
و حالا میگه باید توی فرمی باشه که Runat Server است .
در صورتی که اگر من کنترل رو در FormLoad لود کنم این اشکال پیش نمیاد .

میشه خواهشا یه توضیحی هم درباره این بدین . ممنون .


در ضمن یه نکته خیلی مهم اگه این کارها داری تو یه CustomControl انجام میدی حتما باید اینترفیس INamingContainer رو پیاده سازی کنی.

SalarSoft
یک شنبه 09 مهر 1385, 10:30 صبح
ولی مشکل زیر بوجود میاد .

Control 'ctl00_Nam' of type 'TextBox' must be placed inside a form tag with runat=server.


این تکست باکس Nam روی همون یوزر کنترلی است که عرض کردم میخواد لود بشه .
این مشکل زمانی پیش میاد که قبل از لود شدن کنترل های asp.net در داخل یوزر کننرل اون رندر بشه.

بهتره برای رفع کامل مشکلتون کد ها رو بزارید اینجا.

pegasos
یک شنبه 09 مهر 1385, 10:38 صبح
بادرود.
راستش من با یوزر کنترل ها خیلی کار کردم و یک پروژه بزرگ با اون به راحتی تمام کردم.

شاید مشکل شما از ReCreate کردن یوزر کنترل مربوطه باشند.
همانطور که همه می دانیم ASP.NET هم یک نوع از برنامه های DotNet Remoting ماکروسافت هست.
و کنترل های Page و UserControl از نوع Remoting SingleCall می باشند. یعنی بعد از استفاده در سرور و فراهم کردن کانتنت html سریعا درسمت سرور نابود می شوند.
بنابراین شما چنانچه یوزر کنترلی به صورت داینامیک به صفحه اضافه کردید. هر بار مثل روش اول باید اون رو دوباره بسازید و به صفحه اضافه کنید.
احتمالا این کار را در رویداد Page_load کنترل می کنید.
و احتمالا برای قرار دادن آن در صفحه از کنترل PlaceHolder استفاده می کنید .زیرا برای این کار درست کردنش .
باز هم اگر فکر می کنید مشکلی هست کد خودتون رو برای برسی قرار دهید.
به امید موفقیت.

Chabok
دوشنبه 10 مهر 1385, 04:55 صبح
ممنونم . لود شدن کار میکنه و کلید هم خوب جواب میده .
مشکل اینجا بود که مراحل لود رو از FormLoad حذف نکرده بودم .

فقط یک مشکل کوچیک دیگه هست و اون اینه که من یوزر کنترل رو بر اساس یه سری مراحل لود
می کنم .حتی مسیر یوزر کنترل رو از دیتابیس میخونم و باچک کردن یه سری شرایط لود انجام میشه .
حالا میخوام بدونم آیا میتونم این شرایط رو توی همون تابع CreateChildControls چک کنم ؟
یعنی میتونم بجای FormLoad ازش استفاده کنم یا خیر ؟

ممنون میشم .



راستش من با یوزر کنترل ها خیلی کار کردم و یک پروژه بزرگ با اون به راحتی تمام کردم
چون اینکا ره اید ممنون میشم این سوال رو هم جواب بدین . مربوط به یوزر کنترلهاست .
http://barnamenevis.org/forum/showthread.php?t=31767
استفاده از چند فرم در یک صفحه (http://barnamenevis.org/forum/showthread.php?t=31767)

SalarSoft
دوشنبه 10 مهر 1385, 05:47 صبح
یعنی میتونم بجای FormLoad ازش استفاده کنم یا خیر ؟
قبلا جواب گرفتی

لازم به ذکره بگم که این تابع قبل از Load اجرا میشه به همین خاطر کنترل جدید از هر لحاظ محیا است.