مشکل در پاس کردن اطلاعات به ViewModel
با درود
من دو مدل تعریف کردم به شکل زیر
public class Estates
{
public int id { set; get; }
public string City { set; get; }
}
public class Options
{
public int id { set; get; }
public string Address { set; get; }
}
و سپس یک ViewModel برای این دو مدل و بکارگیری آن در یک View
public class MyViewModels
{
public IEnumerable<Estates> Estate { get; set; }
public IEnumerable<Options> Option { get; set; }
}
و گرفتن اطلاعات از بانک با کوئری Linq
public ActionResult Index()
{
EstateContext db = new EstateContext();
var data = (from s in db.Estate
from c in db.Option
select s).ToList();
return View(data);
}
و View متناظر با این اکشن که 2 مدل در آن نمایش داده میشود
@model Amlak.ViewModels.MyViewModel
@foreach (var item in Model.Estate)
{
@item.City
}
@foreach (var item in Model.Option)
{
@item.Address
}
اما با اجرای برنامه خطای زیر داده میشه
The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[Amlak.Models.Estates]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[Amlak.ViewModels.MyViewModels]'.
دو روزه گرفتار این خطا شدم :افسرده:
ممنون میشم راهنمایی کنید
نقل قول: مشکل در پاس کردن اطلاعات به ViewModel
دوست عزیز مشکل شما توی اکشن index
قرار نیست هر اطلاعاتی از بانک بخونید و بفرستید به ویو ، خودش جایگزین ویو مدل بشه
شما توی اکشن index یک شی از نوع MyViewModel تعریف کنید و توسط این شی Estate وOptions رو مقداردهی کنید و سپس به ویو ارسال نمایید
MyViewModel mymodel=new MyViewModel ()
mymodel.EState=...
mymodel.Options=...
return View(mymodel);
نقل قول: مشکل در پاس کردن اطلاعات به ViewModel
بنویس ببین درست میشه
@model IEnumerable[ Amlak.ViewModels.MyViewModel]
نقل قول: مشکل در پاس کردن اطلاعات به ViewModel
ممنون آقای رضایی از جوابتون اما اگر بخواهیم در یک دستور مدل ها را مقدار دهی کنیم چه راه حلی هست ؟
در خیلی از کوئری های Linq یا EF اطلاعات چند جدول یا چند مدل به یک شی داده میشه یا به یک متغیر مثل زیر
var data = (from s in db.Estate
from c in db.Option
select s).ToList();
و یا
var posts = ctx.Tags.Where(x => x.Name == "Tag1").SelectMany(x => x.BlogPosts);
return View(posts);
حالا چطور به یک ویو این اطلاعات پاس میشه ؟
نقل قول: مشکل در پاس کردن اطلاعات به ViewModel
نقل قول:
نوشته شده توسط
RIG000
بنویس ببین درست میشه
@model IEnumerable[ Amlak.ViewModels.MyViewModel]
نه به این شکل هم امتحان کردم و همان خطا
نقل قول: مشکل در پاس کردن اطلاعات به ViewModel
به نظر من هم جواب آقای رضایی درسته. خطایی که به شما میده اینه که انتظار داره یک MyViewModels بهش داده بشه اما System.Collections.Generic.List بهش میدین .کد آقای رضایی رو میشه به اسن صورت هم نوشت:
var mymodel=new MyViewModel{
EState=...
Options=...
}
return View(mymodel);
اما اگر بخواهید کد تون رو به صورت زیر بنویسید:
var posts = ctx.Tags.Where(x => x.Name == "Tag1").SelectMany(x => x.BlogPosts);
باید در View هم تغییر بدید و مدل را هم همان نوع BlogPosts قرار دهید. به عنوان مثال:
@model List<DBContetxt.BlogPosts>