PDA

View Full Version : افزودن کنترل به صورت داینامیک



egproje
پنج شنبه 10 فروردین 1391, 22:37 عصر
سلام
برای بخش مدیریت یک وبسایت خبری تحلیلی نیاز دارم که در قسمت آپلود عکس، زمانی که کاربر برروی یک دکمه کلیک می کنه، یک کنترل آپلود فایل به صفحه اضافه بشه، و با هربار کلیک این عمل تکرار بشه، برای اینکار یک placeholder قرار دادم و کنترل رو به اون اضافه می کنم، برای تست این کار رو با label تست کردم، برای بار اول که کاربر دکمه رو کلیک می کنه، یک label اضافه می شه اما برای دفعات بعدی label اضافه نمیشه و فقط همون label ، تکست و ID یش عوض می شه، از کد زیر برای اینکار استفاده می کنم، ممنون میشم اگر راهنمایی کنید، نکته اینه که اگر اضافه کردن کنترل رو درون یک حلقه for قرار بدم، مثلا به تعداد 5 بار، اضافه می کنه اما خارج از حلقه نمی تونم. ممنون میشم راهنمایی کنید.
در ضمن از viewstate استفاده کردم تا بتونم Id کنترل رو افزایش بدم.




Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim count As Integer
If ViewState("count") Is Nothing Then
count = 4
Else
count = CType(ViewState("count"), Integer) + 1

End If
Dim sp As LiteralControl = New LiteralControl("<br>")
PlaceHolder1.Controls.Add(sp)
ViewState("count") = count
Dim mylbl As Label = New Label
mylbl.Text = "label" & count
mylbl.ID = "label" & count
PlaceHolder1.Controls.Add(mylbl)


End Sub

C#.net
پنج شنبه 10 فروردین 1391, 22:51 عصر
مشکل اینه:
در هر PostBack فرم از اول ایجاد می شه و چون کنترل های داینامیک شما در هیچ viewstate ی ذخیره نشده اند، پس از PostBack از بین می رن
چاره اینه که با یک مکانیزمی(مثل پراپرتی مبتنی بر viewstate از لیست کنترل های اضافه شده) در Page_Load کنترل های داینامیک رو دوباره ایجاد کنید

A.S.Roma
پنج شنبه 10 فروردین 1391, 23:48 عصر
یک نمونه :
http://barnamenevis.org/showthread.php?293067-%D8%B5%D9%81%D8%AD%D9%87-%D9%BE%D9%88%DB%8C%D8%A7/page3&highlight=%DA%A9%D9%86%D8%AA%D8%B1%D9%84
اما پیشنهاد من اینه که پیچیدگی رو ببرید سمت کلاینت و خودتون رو درگیر تولید Dynamic کنترل ها نکنید.
استفاده از JSON و JQuery می تونه پاسخگوی نیاز شما باشه.

egproje
جمعه 11 فروردین 1391, 02:01 صبح
استفاده از JSON و JQuery می تونه پاسخگوی نیاز شما باشه.

میشه یه ذره بیشتر توضیح بدین که چطوری این کار رو با jquery انجام بدم ؟ منظورتون Hide کردن کنترل ها که نیست هست؟

egproje
جمعه 11 فروردین 1391, 02:05 صبح
مشکل اینه:
در هر PostBack فرم از اول ایجاد می شه و چون کنترل های داینامیک شما در هیچ viewstate ی ذخیره نشده اند، پس از PostBack از بین می رن
چاره اینه که با یک مکانیزمی(مثل پراپرتی مبتنی بر viewstate از لیست کنترل های اضافه شده) در Page_Load کنترل های داینامیک رو دوباره ایجاد کنید

خوب اینطوری مقدار داخل اون کنترل از بین میره که، مثل آدرس یک فایلی که می خوام آپلود کنم در کنترل fileupload و هنووز آپلود نشده، اینطوری از بین میره
کاری که می خوام بکنم دقیقا همون کاریه که سایت های آپلود عکس انجام میدن مثلا 4 تا عکس رو انتخاب کردی واسه آپلود و می خوای که با کلیک روی یک دکمه مثلا به شکل + یک کنترل fileupload دیگه به صفحه اضافه بشه

C#.net
جمعه 11 فروردین 1391, 11:29 صبح
خوب اینطوری مقدار داخل اون کنترل از بین میره که، مثل آدرس یک فایلی که می خوام آپلود کنم در کنترل fileupload و هنووز آپلود نشده، اینطوری از بین میره
کاری که می خوام بکنم دقیقا همون کاریه که سایت های آپلود عکس انجام میدن مثلا 4 تا عکس رو انتخاب کردی واسه آپلود و می خوای که با کلیک روی یک دکمه مثلا به شکل + یک کنترل fileupload دیگه به صفحه اضافه بشه
خیر
اگر این میکانیزم رو پیاده سازی کنید آدرس فایل به صورت اتوماتیک از viewstate بازیابی می شه، این مثال رو دانلود کنید:
http://www.codeproject.com/Articles/8114/Dynamically-Created-Controls-in-ASP-NET

egproje
جمعه 11 فروردین 1391, 21:05 عصر
اگر امکانش هست برای پیاده سازی با jquery راهنمایی کنید