PDA

View Full Version : مشکل مهم در مورد پاس دادن مدل به View



resident
سه شنبه 15 بهمن 1392, 17:03 عصر
مشکل اساس و مهم و فوری در مورد پاس دادن مدل به View
سلام.
من یه جدول دارم برای اشخاص و اطلاعات تماس شامل فیلدهای زیر:
اشخاص: نام ، نام خانوادگی
تلفن: عنوان، تلفن
برای یه فرد هر تعدادی میشه تلفن ثبت کرد. یعنی مثلا:
نام نام خانوادگی عنوان تلفن
سارا محمدی 2 77778787
سارا محمدی 3 77858965

علی زارع 3 09124622222
محمود ناظری NULL NULL


حالا من میخوام اطلاعات اینا رو بدم به View. چطور باید پیاده سازی بشه؟
آیا مدلهایی که تعریف می کنم درسته؟


مدل Person:


[Display(Name = "نام خانوادگی")]
public string Name { get; set; }

[Display(Name = "نام")]
public string Family { get; set; }
public List<ContactModel> contacts { get; set; }




مدل Contact برای تلفن:


[Display(Name = "تلفن")]
publicstring Tel { get; set; }
publicintOnvanID { get; set; }


مدل برای عنوان:




[Display(Name = "عنوان")]
public string Title { get; set; }
برای یه فرد میشه چند تا Contact ثبت کرد.
حالا میخوام بدونم اولا نحوه تعریف مدلهام درسته یا نه و سوال مهم: تو Controller افراد ، چطور اطلاعات Contact رو باید بهش پاس بدم.
باید ViewModel تعریف کنم و اطلاعات افراد و Contact هاشو در 2 مدل بهش پاس بدم یا اینکه همه ی اطلاعات(افراد و Contact هاشو ) رو به مدل Person بدم؟
لطفا راهنماییم کنید. کارم خیلی گیره...

younesdoost
سه شنبه 15 بهمن 1392, 22:20 عصر
با کد Person.contacts به شماره های هر فرد دسترسی دارید به شرطی که در هنگام خواندن اطلاعات داشته باشید:context.Pesrons.Include("contacts")

resident
چهارشنبه 16 بهمن 1392, 06:35 صبح
با کد Person.contacts به شماره های هر فرد دسترسی دارید به شرطی که در هنگام خواندن اطلاعات داشته باشید:context.Pesrons.Include("contacts")
younesdoost جان ممنون از وقتی که گذاشتی و پاسخ داادی...
اگه بخوام این کار رو بکنم یه مشکلی دارم و نمیدونم چطور باید حلش کنم.
در دیتابیس من هم جدول Person دارم هم Contact.برای یه Person هم می تونیم چند تا Contact داشته باشیم یا اصلا نداشته باشیم.
یه View هم دارم که Person و Contactرو Join کرده.
تو برنامه من اطلاعات رو با ADO میخونم و میریزم تو پراپرتی هام...
نمیدونم الان با این وضعیت چطور باید کد بزنم ؟ آخه تو اون View ، برای یه فرد ممکنه n تا رکورد وجود داشته باشه .
لطفا راهنماییم کنید :(

EnKamran
چهارشنبه 16 بهمن 1392, 13:00 عصر
ببین دوست من وقتی شما میای Contacts رو از نوغ IList‌تعریف میکنی (که پیشنهاد بنده ICollection<> هست) یعنی دقیقا همین چیزی که میگی (یک فرد چندتا کانتکت میتونه داشته باشه) شما وقتی مشخصات یک فرد رو به ویو میفرستی توی ویو از مدلت میتونی لیست کانتکت ها رو هم بگیری :

@foreach(var contact in model.Contacts)
{
<li>@contact.Name</li>
}

resident
چهارشنبه 16 بهمن 1392, 13:40 عصر
ببین دوست من وقتی شما میای Contacts رو از نوغ IList‌تعریف میکنی (که پیشنهاد بنده ICollection<> هست) یعنی دقیقا همین چیزی که میگی (یک فرد چندتا کانتکت میتونه داشته باشه) شما وقتی مشخصات یک فرد رو به ویو میفرستی توی ویو از مدلت میتونی لیست کانتکت ها رو هم بگیری :

@foreach(var contact in model.Contacts)
{
<li>@contact.Name</li>
}
ممنون دوست عزیز...
یه دوستی می گفت سعی کنید collection داخل مدلتون استفاده نکنید چون حافظه اشغال می کنه. به نظر من حرفشون درست نیست. نظر شما چیه؟

و یه سوال دیگه.
تو همین مورد فرد و کانتکت ها، من یه View برای Person ایجاد کردم و یه Partial View برای کانتکتها. و پارشال ویوی کانتکت رو داخل ویوی Person صدا زدم.
مدل پارشال ویوی کانتکت رو از نوع Contact تعیین کردم ولی وقتی از داخل ویوی Person مدل Person.Contacts رو به پارشال ویو پاس میدم، null است. چرا؟؟؟

resident
چهارشنبه 16 بهمن 1392, 13:42 عصر
که پیشنهاد بنده ICollection<> هست

مزیت ICollection چیه ؟؟

younesdoost
چهارشنبه 23 بهمن 1392, 20:37 عصر
younesdoost جان ممنون از وقتی که گذاشتی و پاسخ داادی...
اگه بخوام این کار رو بکنم یه مشکلی دارم و نمیدونم چطور باید حلش کنم.
در دیتابیس من هم جدول Person دارم هم Contact.برای یه Person هم می تونیم چند تا Contact داشته باشیم یا اصلا نداشته باشیم.
یه View هم دارم که Person و Contactرو Join کرده.
تو برنامه من اطلاعات رو با ADO میخونم و میریزم تو پراپرتی هام...
نمیدونم الان با این وضعیت چطور باید کد بزنم ؟ آخه تو اون View ، برای یه فرد ممکنه n تا رکورد وجود داشته باشه .
لطفا راهنماییم کنید :(

سلام.
مشکلش چیه؟
در ضمن از راهی که خودتونم گفتید میشه دیگه.فقط کافیه داده هایی که می خونید رو cast کنید به Person و List<Contact> بعد اینا رو به پراپرتی های ویو مدل ترکیبیتون نسبت بدید.باز هم با کد YourViewModel.Contacts می تونید Contact های هر Person رو بگیرید دیگه.