ورود

View Full Version : سوال: استفاده از ViewModel برای متد Create و استفاده از DataAnnotation های تعریف شده در آن



helpsos
چهارشنبه 14 اسفند 1392, 10:13 صبح
با سلام
فرض کنید که برای استفاده از DataAnnotation ها ما از model خود یک ViewModel ساخته ایم و در آنجا این DataAnnotation ها رو معرفی کرده ایم.
حالا وقتی که می خوایم در Controller برنامه با استفاده از Scaffolding Type مثلا یک متد Create بسازیم برای اینکه اطلاعات را اضافه کنیم ، چطوری باید این کار رو انجام بدیم تا DataAnnotation های ما کار بدهند؟

bahareh1368
چهارشنبه 14 اسفند 1392, 22:21 عصر
با سلام
فرض کنید که برای استفاده از DataAnnotation ها ما از model خود یک ViewModel ساخته ایم و در آنجا این DataAnnotation ها رو معرفی کرده ایم.
حالا وقتی که می خوایم در Controller برنامه با استفاده از Scaffolding Type مثلا یک متد Create بسازیم برای اینکه اطلاعات را اضافه کنیم ، چطوری باید این کار رو انجام بدیم تا DataAnnotation های ما کار بدهند؟

کافیه در viewmodel ایجاد شده DataAnnotation ها رو اضافه کنید و زمان افزودن کنترلر Model Class رو نام ViewModel قرار بدید و Data Conext Class را اگه دارید از ModelFirst استفاده می کنید نام ef خود قرار دهید و اگه روش Code First استفاده می کنید نام Context خود را قرار دهید.در نهایت با تعیین Scaffolding Type کار تمام می شود و کنترلر ساخته میشود

helpsos
پنج شنبه 15 اسفند 1392, 00:00 صبح
ممنون از اینکه وقت گذاشتین
ببخشید ولی منظورم این بود که چطوری برای ViewModel خود یک PartialView یا یک View بسازم که متد Create رو با DataAnnotation های داخل آن پیاده سازی نماید؟
البته یک عکس از مراحلی که انجام دادم و بهم جواب نداده رو گذاشتم.
http://www.mediafire.com/view/fnmaakyiweut3pj/Untitled.png

hakim22
پنج شنبه 15 اسفند 1392, 11:18 صبح
فرقی نمیکند DataAnnotation ها را کجا تعریف کنید. مشکل این است که DataAnnotation ها مانند Required با جاوا اسکریپت کار میکنند و گزینه ی Refrence Script libraries هم این اسکریپت ها را درون PartialView اضافه میکند اما چون PartialView ساخته شده بعدا درون یک View دیگر لود میشود اسکریپتها به درستی کار نخواهند کرد.

اسکریپتهای مربوطه به Validation به صورت Unobtrusive هستند و بهتر است بعد از بارگذاری کامل HTML صفحه بارگذاری شوند.

شما باید درون View ایی که این PartialView را فراخوانی می کنید این اسکریپت ها را لود کنید. در حقیقت همیشه باید اسکریپت ها را درون View لود کنید و نه درون PartialView. بعدا وقتی ASP صفحه را بازسازی میکند مثل تکه های پازل همه چیز سر جایشان قرار خواهند گرفت.

Cybersilent
جمعه 16 اسفند 1392, 12:05 عصر
شما باید درون View ایی که این PartialView را فراخوانی می کنید این اسکریپت ها را لود کنید. در حقیقت همیشه باید اسکریپت ها را درون View لود کنید و نه درون PartialView. بعدا وقتی ASP صفحه را بازسازی میکند مثل تکه های پازل همه چیز سر جایشان قرار خواهند گرفت.
به نظرتون بهتر نیست اسکریپیتی که فقط توی PartialView به کار رفته و قرار توی View های مختلفی استفاده بشه رو مستقیم درون خودPartialView تعریف کنیم؟

hakim22
جمعه 16 اسفند 1392, 20:08 عصر
به نظرتون بهتر نیست اسکریپیتی که فقط توی PartialView به کار رفته و قرار توی View های مختلفی استفاده بشه رو مستقیم درون خودPartialView تعریف کنیم؟

هدف اصلی از ساختن PartialVIew این است که قرار است از آن چندین بار استفاده کنیم. (مثلا درون یک حلقه) . در این صورت اسکریپت درون آن به تعداد ساخته شدن PartialView دوباره سازی میشود.

مشکل بعدی این است طبق روشهای بهینه ی اصولا اسکریپتها باید در انتهای هر صفحه ی HTML قرار بگیرند. اگر اسکریپتها را درون PartialView قرار دهید کدهای آن در وسط کدهای HTML قرار میگیرند و بارگذاری صفحه کند تر میشود. چون مرورگرها هر زمانی به تگ Script برسند آن را بارگذاری و اجرا می کنن و بعد به تگ بعدی میرونداجرای کد جاوااسکریپت قبل از آنکه تمام صفحه لود شده باشد معمولا خطا در پی دارد.

مسئله آخر این است که کدهای جاوا اسکریپت برای یک PartialView معمولا زیاد نیست و سرمایه گذاری برای بهینه کردن حجم بارگذاری اسکریپت با قرار دادن آنها درون PartialView تلاش بیهوده ای است.