PDA

View Full Version : سوال: ساخت View Model از رابطه many to many و دریافت model از view برای ذخیره داده ها



fardin_esmi
سه شنبه 04 آبان 1395, 10:21 صبح
با عرض سلام خدمت اساتید گرامی
Entitty Framework
من دو کلاس دارم که با هم رابطه many to many دارند . به صورت زیر:


public class GroupAndChannel
{
public GroupAndChannel()
{
GacId = Guid.NewGuid();
Tags = new List<Tag>();
}

[ForeignKey("ApplicationUser")]
public string UserId { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
public virtual ICollection<Tag> Tags { get; set; }

[Key]
public Guid GacId { get; set; }
public string JoinLink { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public int Members { get; set; }
public string Language { get; set; }
public string OtherLanguage { get; set; }
public int Grade { get; set; }
public string Description { get; set; }
public DateTime Register { get; set; }
}

و کلاس دیگر هم به صورت زیر:


public class Tag
{
public Tag()
{
GrupAndChannels = new List<GroupAndChannel>();
}
public int TagId { get; set; }
public string TagName { get; set; }
public bool IsSelected{ get; set; }
public int InGroup { get; set; }
public int InChannel { get; set; }
public int InTotal { get; set; }

public virtual ICollection<GroupAndChannel> GrupAndChannels { get; set; }
}

1- وقتی یک رکورد می خوام ثبت کنم باید بتونم از لیست باکس تگ ها یک یا چند تا تگ رو انتخاب کنم .
- چطور یک ویو مدل بسازم که بتونم ازش برای لیست باکس استفاده کنم ؟
- یا بیام لیست تگ ها رو از دیتابیس بخونم و بریزم توی یک ViewBag و به لیست باکس ارسال کنم ؟
2-وقتی فرم ارسال شد چطور مقادیر لیست باکس رو دریافت کنم و به کالکشن تگ ها اضافه کنم ؟
می دونید که وقتی رابطه چند به چند داریم entity خودش یک جدول میانی میسازه که شامل آی دی های دو جدولی است که این رابطه رو دارند.چطور داده ها را به این جداول و جدول میانی اضافه کنم ؟

ali_md110
چهارشنبه 05 آبان 1395, 13:06 عصر
سلام

ویومدل بدین صورت طراحی کنید که شامل فیلدهای لازم وضروری در ویو باشند


public class GroupAndChannelViewModel

{

public string UserId { get; set; }
public Guid GacId { get; set; }

public string JoinLink { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public int Members { get; set; }
public string Language { get; set; }
public string OtherLanguage { get; set; }
public int Grade { get; set; }

public string Description { get; set; }


public DateTime Register { get; set; }

public List<Tag> Tags { get; set; }
public int[] TagId{ get; set; }
}



فرض کنید کنترولر بدین صورت باشه


public virtual ActionResult Index;/lo/( nnnnnj)
{
var model = new GroupAndChannelViewModel
{
............Tags = _Service")
};

return View(model);
}


اگر توجه کنید یک ارایه از نوع int تعریف شده
این ارایه برای دریافت کد تگها از قسمت ویو هست
و الان باید از یک لیست باکس یا دراپ داوون باکس با خاصیت Multiple توی ویو داده ها رو پر کنید


@Html.DropDownListFor(m => m.TagId, new MultiSelectList(Model.Tags, "TagId", "TagName"), new {@class = "form-control multiselect input-sm no-padding", multiple = "multiple", id = "TagId", })


این قسمت همون ارایه هست


m => m.TagId,

میتونید از پلاگین هایی مثل Chosen برای تزیین لیست باکس استفاده کنید تا زیبا تر بشه

حالا برای درج مقادیر ارسالی ارایه د رسمت کنترولر و درج چند به چند , مقادیر ارایه رو با یک حلقه بریزید توی یک لیست از نوع Tag و این لیست رو انتساب بدید به GroupAndChannel.Tags

fardin_esmi
شنبه 08 آبان 1395, 10:26 صبح
ممنون به خاطر وقتی که گذاشتید .
مثل ساعت کار می کنه