PDA

View Full Version : پاس دادن مدل دینامیک به View



resident
شنبه 05 بهمن 1392, 17:22 عصر
سلام

چطور میشه مدل رو به صورت دینامیک در view تعریف کرد. من تعداد زیادی فرم دارم که از لحاظ فیلدها یکسانن. همشون کد و عنوان دارن.

حالا من میخوام به جای اینکه برای هرفرم یه view بذارم، یه View تعریف کنم برای Add اون فرمها. پس لازم دارم که مدل روبه صورت دینامیک تعریف کنم.

از اساتید کسی می تونه راهنماییم کنه یا پیشنهادی بده.

Cybersilent
شنبه 05 بهمن 1392, 22:17 عصر
یک نکته این که خود شی مدل یک شی Dynamic هست،
اما چیزی که شما می خواهید رو فکر می کنم باید از امکانات reflection دات نت کمک بگیرید برای اینکه فیلد های یک کلاس رو که در شی داینامیک ریخته اید رو بیرون بکشید(کمی پیشرفته است):

یک نمونه برای کار با Reflection :
http://webdeveloper.blog.ir/1392/03/31/%D8%B3%D8%A7%D8%AE%D8%AA-GridView-%D8%AF%D8%B1-ASP-NET-MVC-41

resident
یک شنبه 06 بهمن 1392, 07:59 صبح
یک نکته این که خود شی مدل یک شی Dynamic هست،
اما چیزی که شما می خواهید رو فکر می کنم باید از امکانات reflection دات نت کمک بگیرید برای اینکه فیلد های یک کلاس رو که در شی داینامیک ریخته اید رو بیرون بکشید(کمی پیشرفته است):

یک نمونه برای کار با Reflection :
http://webdeveloper.blog.ir/1392/03/31/%D8%B3%D8%A7%D8%AE%D8%AA-GridView-%D8%AF%D8%B1-ASP-NET-MVC-41
دوست عزیز ممنونم ازتون.
ولی تو لینک مطلبی نیست :)

hakim22
یک شنبه 06 بهمن 1392, 09:25 صبح
اصولا وقتی فیلدها یکسانند چرا مدلهای متفاوتی تعریف کنید !؟

میتوانید از T4 برای ساختن یک View در زمان اجرا استفاده کنید.

resident
یک شنبه 06 بهمن 1392, 09:54 صبح
اصولا وقتی فیلدها یکسانند چرا مدلهای متفاوتی تعریف کنید !؟

میتوانید از T4 برای ساختن یک View در زمان اجرا استفاده کنید.

سپاس فراوان از شما.
امکانش هست یه مثالی بزنید یا راهنمایی کنید یا نمونه سورسی بذارید که سریعتر بتونم این کار رو انجام بدم؟

d_derakhshani
یک شنبه 06 بهمن 1392, 10:20 صبح
یک راهش کپی یک مدل در مدل دیگه هست. من قبلا یک تابع کپی با reflection نوشته ام که هر کلاسی رو می تونه توی یک کلاس دیگه با فیلدهای مشابه(حتی با تعداد فیلد متفاوت) کپی کنه.
همچنین می تونید یک کلاس واسط برای مدلهای یکسان در نظر بگیرید که همیشه از اون استفاده کنید به جای چند کلاس.
اما هرچی فکر میکنم T4 برای مساله شما نمی تونه یک راه حل باشه. یعنی توش ارتباطی نمی بینم(با این حال نمیگم نمیشه اما من ارتباطی نمی بینم)

resident
یک شنبه 06 بهمن 1392, 11:53 صبح
یک راهش کپی یک مدل در مدل دیگه هست. من قبلا یک تابع کپی با reflection نوشته ام که هر کلاسی رو می تونه توی یک کلاس دیگه با فیلدهای مشابه(حتی با تعداد فیلد متفاوت) کپی کنه.
همچنین می تونید یک کلاس واسط برای مدلهای یکسان در نظر بگیرید که همیشه از اون استفاده کنید به جای چند کلاس.
اما هرچی فکر میکنم T4 برای مساله شما نمی تونه یک راه حل باشه. یعنی توش ارتباطی نمی بینم(با این حال نمیگم نمیشه اما من ارتباطی نمی بینم)

لطف می کنید یه مقدار توضیح بدید در مورد اون کلاس واسط و راه حلتون؟ چطور پیاده سازی اش کنم؟

d_derakhshani
یک شنبه 06 بهمن 1392, 11:55 صبح
کلاس واسط چیز خاصی نیست. یک کلاس میگیرید که مجموع فیلدهای کلاس های مشابه رو داشته باشه و فیلدهای مشابه فقط یکبار بیاد.

resident
یک شنبه 06 بهمن 1392, 14:52 عصر
کلاس واسط چیز خاصی نیست. یک کلاس میگیرید که مجموع فیلدهای کلاس های مشابه رو داشته باشه و فیلدهای مشابه فقط یکبار بیاد.
OK
فرض کنید این کار رو کردم...
حالا یه سوال:
من 20 تا فرم دارم که همشون ID, Title دارن.
روی ID بحث ندارم.
اما در مورد Title: Title ها طولشون و عنوانی که با اون باید نمایش داده بشن فرق می کنن.مثلا در 2 مدل، من 2 تا Title زیر رو دارم.


[Display(Name = "نوع شرکت")]
[Required(ErrorMessage = "*")]
[StringLength(50, ErrorMessage = "حداکثر 50 کاراکتر وارد نمایید")]
public override string Title { get; set; }


[Display(Name = "واحد")]
[Required(ErrorMessage = "*")]
[StringLength(30, ErrorMessage = "حداکثر 30 کاراکتر وارد نمایید")]
public override string Title { get; set; }


با این وضعیت فکر کنم نشه اون راهی که شما پیشنهاد کردید رو انجام داد. درسته؟؟؟
چون Display و StringLengthشون فرق می کنه

Cybersilent
سه شنبه 08 بهمن 1392, 10:59 صبح
لینک اصلاح شده :
http://webdeveloper.blog.ir/1392/03/31/%D8%B3%D8%A7%D8%AE%D8%AA-GridView-%D8%AF%D8%B1-ASP-NET-MVC-4