PDA

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



amir_monster1
دوشنبه 04 اسفند 1393, 22:54 عصر
با درود
من دو مدل تعریف کردم به شکل زیر



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]'.

دو روزه گرفتار این خطا شدم :افسرده:

ممنون میشم راهنمایی کنید

rezaei_y
سه شنبه 05 اسفند 1393, 00:38 صبح
دوست عزیز مشکل شما توی اکشن index
قرار نیست هر اطلاعاتی از بانک بخونید و بفرستید به ویو ، خودش جایگزین ویو مدل بشه
شما توی اکشن index یک شی از نوع MyViewModel تعریف کنید و توسط این شی Estate وOptions رو مقداردهی کنید و سپس به ویو ارسال نمایید

MyViewModel mymodel=new MyViewModel ()
mymodel.EState=...
mymodel.Options=...
return View(mymodel);

RIG000
سه شنبه 05 اسفند 1393, 01:44 صبح
بنویس ببین درست میشه


@model IEnumerable[ Amlak.ViewModels.MyViewModel]

amir_monster1
سه شنبه 05 اسفند 1393, 09:35 صبح
ممنون آقای رضایی از جوابتون اما اگر بخواهیم در یک دستور مدل ها را مقدار دهی کنیم چه راه حلی هست ؟

در خیلی از کوئری های 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);

حالا چطور به یک ویو این اطلاعات پاس میشه ؟

amir_monster1
سه شنبه 05 اسفند 1393, 09:38 صبح
بنویس ببین درست میشه


@model IEnumerable[ Amlak.ViewModels.MyViewModel]

نه به این شکل هم امتحان کردم و همان خطا

karadous
چهارشنبه 06 اسفند 1393, 16:45 عصر
به نظر من هم جواب آقای رضایی درسته. خطایی که به شما میده اینه که انتظار داره یک 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>