View Full Version : Model and View Model
alireza_rashvand
یک شنبه 30 فروردین 1394, 17:51 عصر
با سلام
اگر بخواهیم لیستی از مودل کاربران در Identity 2.0 (http://barnamenevis.org/showthread.php?471502-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-Identity-2-0) به یک ویو مدل بدیم چطور باید انجام داد؟
می خواهم لیستی از کاربران همراه با نوع رول رو به صورت لیست در اختیار داشته باشم.
اگر از AutoMapper هم می شود لطفا بفرمایید.
گیر اصلیم اینجاست که نمی دونم مودل user در Identity (http://barnamenevis.org/showthread.php?471502-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-Identity-2-0) کدام است
r4hgozar
یک شنبه 30 فروردین 1394, 21:25 عصر
سلام.
مدل که در identity نمیشه دست زد. در داخل یکی از کلاس های identity که کلاس های بعدی از اون مشتق میشن.
اما شما می تونی از uerview model در مدل ها استفاده کنی و کدی رو که می خوای بنویسی.
به نظر کد sample که identity.sample هست رو نگاه کنی دقیقا همین رو که می خوای انجام داده.
من خودم از identity.sample استفاده کردم و اون رو custom کردم و جاهایی رو هم که اشکال داشت درست کردم و در اخر اومدم و اون رو کلا بردم داخل یه dll مجرا تا بشه هر پروژه که بخوام استفاده کنم.
موفق باشید
alireza_rashvand
دوشنبه 31 فروردین 1394, 12:44 عصر
سلام سپاس از شما.
اصلا identity رو بذارید کنار
چطور می شه لیستی از یک مودل رو به لیستی از ویومدل داد...؟
بدون استفاده از AutoMapper تا به حال ندیدم لیستی از مودل در لیستی از ویو مودل بریزند (شاید باید یک حلقه از مودل ایجاد کرد تک به تک ان را ریخت)
اما در AutoMapper می تونیم با یک خط کد لیستی از مودل رو به لیستی از یومودل بدیم
در Identity 2.0 (http://barnamenevis.org/showthread.php?471502-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-Identity-2-0) (لینک رو ببینید قبلا ان چیزی که شما گفتید انجام دادم) مشکل اینجاست که مودل user مشخص نیست(یا حداقل بنده نمی دونم) تا ان را به ویومودل بدم.
لطفا دوستان اگر با Identity 2.0 (http://barnamenevis.org/showthread.php?471502-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-Identity-2-0) کار نکردند حداقل نمونه کدی بدید تا لیستی از مودل به لیستی از ویومودل داده شود (چه بدون AutoMapper و یا به وسیله AutoMapper) تا یاد بگیرم.
و اگر کسی می دونه در Identity 2.0 (http://barnamenevis.org/showthread.php?471502-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-Identity-2-0) مودل یوزر کجاست یا اگر بخواهیم لیستی از کاربران داشته باشیم (همراه با رولشان) چطور می تونیم به ان دست پیدا کنیم.
متاسفانه هرچه سرچ می کنم به نتیجه ای نمی رسم
mohammadreza.najafipour
دوشنبه 31 فروردین 1394, 13:24 عصر
با سلام.
در مورده پاس دادن اطلاعات از Model به ViewModel بدون استفاده از AutoMapper این روش رو میتونی استفاده کنی:
فرض کنیم مدل ما به این شکل هستش:
public class MyModel
{
public int Id { get; set; }
[Required]
[MaxLength(50)]
public string Title { get; set; }
public string Link { get; set; }
public int Visit { get; set; }
}
و فرض می کنیم ViewModelای داریم که به این شکل هستش:
public class MyViewModel
{
public int Id { get; set; }
[Display(Name = "عنوان")]
public string VTitle { get; set; }
[Display(Name = "تعداد بازدید")]
public int Visit { get; set; }
}
تذکر: برای اینکه نشون بدیم ViewModel میتونه با Model فرق داشته باشه Link رو در اون قرار ندادیم.
حالا با دستور زیر اطلاعات رو دریافت می کنیم:
var model = db.MyModels.Select(
ms => new MyViewModel
{
Id = ms.Id,
VTitle = ms.Title,
Visit = ms.Visit
}).ToList();
alireza_rashvand
پنج شنبه 03 اردیبهشت 1394, 17:47 عصر
سلام
اقای نجفی پور بازهم ما رو شرمنده کردید :)
با توجه به گفته شما :
ApplicationDbContext db = new ApplicationDbContext();
var model = db.Users.Select(MS => new UserInfo
{
User = MS.name + " " + MS.family,
UserId = MS.Id,
roleId = MS.Roles.FirstOrDefault().RoleId,
RoleName = "؟؟؟"
}).ToList();
قصد دارم نام کاربران همراه با رولشون در اختیار داشته باشم از انجایی که در این مثال هر کاربر یک رول داره از Roles.FirstOrDefault استفاده کردم و گرنه می شد لیستی از رول های کاربر رو در اختیار داشت
مشکلی که الان برام به وجود اومده اینکه نمی دونم چطور می شه نام رول رو بدست اورد...
mohammadreza.najafipour
یک شنبه 06 اردیبهشت 1394, 14:37 عصر
خواهش می کنم :لبخندساده:
توی مثال Identity کنترلری به اسم UserAdmin داریم که در Index نام تمامی کاربرها رو لیست می کنه. در اکشن Details تمام Role های کاربر مورد نظر رو نمایش میده.
برای اینکار هم از تابع GetRolesAsync که مربوط به کلاس ApplicationUserManger هست استفاده می کنه. سورس اصلی (https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNet.Identity/UserManager.cs) رو که نگاه کردم متاسفانه متوجه رونده کار نشدم :لبخندساده:
اما برای اینکاری که میخواید انجام بدید یه عبارتی نوشتم که نمیدونم تا چه حد بهینه یا درست هستش اما جواب میده:
var roles = db.Roles.ToList();
var model = db.Users.Select(MS => new RolesView
{
User = MS.Name,
UserId = MS.Id,
RoleId = MS.Roles.FirstOrDefault().RoleId,
RoleName = roles.Where(j => j.Id == MS.Roles.FirstOrDefault().RoleId).Select(a => a.Name).FirstOrDefault()
}).ToList();
پ.ن: قطعا کدهای بهینه و بهتری هم هستش. اگه به نتایج بهتری رسیدید من رو هم در جریان بذارید. مرسی
alireza_rashvand
دوشنبه 07 اردیبهشت 1394, 17:21 عصر
متاسفانه این خطا رو میده:
Unable to create a constant value of type 'Microsoft.AspNet.Identity.EntityFramework.Identit yRole'. Only primitive types or enumeration types are supported in this context.
mohammadreza.najafipour
سه شنبه 08 اردیبهشت 1394, 11:41 صبح
متاسفانه این خطا رو میده:
Unable to create a constant value of type 'Microsoft.AspNet.Identity.EntityFramework.Identit yRole'. Only primitive types or enumeration types are supported in this context.
این کد برای خودم کار کرد. و خطا هم عجیب به نظر میاد. اگه یه پروژه ی جدا درست کنید و اینجا آپلود کنید ممنون میشم. اینطوری فکر کنم بشه بهتر بررسی کرد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.