ورود

View Full Version : اتصال دو جدول



zahraRF
شنبه 02 مرداد 1395, 09:30 صبح
سلام من تو یک سایت فروشگاهی می خوام بعد از اینکه محصولاتمو طبقه بندی کردم وارد صفحه محصولاتم بشم اما با این ارور مواجه میشم..
The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[Alborz.ProductInfo]', but this dictionary requires a model item of type 'System.Collections.Generic.List`1[Alborz.Category]'.

داخل کنترلرم اینو نوشتم
public ActionResult Product(int id) {
var context = new AlborzEntities();
var productList = context.ProductInfoes.Where(x => x.CategoryId==id).ToList();
return View(productList);
}


و داخل ویو
@foreach (var item in Model){


<div class="grid_1_of_4 images_1_of_4">
<a href="#"><img src="@item.Image" alt="" /></a>
<h2>


@item.Name
</h2>

<p><span class="price">@item.Price</span></p>
<div class="button"><span><img src="images/cart.jpg" alt="" /><a href="preview-3.html" class="cart-button">افزودن به سبد خرید</a></span> </div>
<div class="button"><span><a href="preview-3.html" class="details">جزئیات</a></span></div>
</div> }


namespace Alborz{
using System;
using System.Collections.Generic;

public partial class ProductInfo
{
public int Id { get; set; }
public string Name { get; set; }
public string Price { get; set; }
public string Image { get; set; }
public string ShortDescription { get; set; }
public string longDescription { get; set; }
public string Brand { get; set; }
public Nullable<int> CategoryId { get; set; }

public virtual Category Category { get; set; }
}
}

Moien Tajik
شنبه 02 مرداد 1395, 13:05 عصر
در بالای ویو چه مدلی رو نوشتین ؟

zahraRF
شنبه 02 مرداد 1395, 13:36 عصر
در بالای ویو چه مدلی رو نوشتین ؟

@model List<Alborz.ProductInfo>

alireza_s_84
شنبه 02 مرداد 1395, 14:17 عصر
@model List<Alborz.ProductInfo>


متن پیام خطا به این موضوع اشاره میکنه که Viewای حال حاضر انتظار مدلی از نوع Alborz.Category رو داره در حالیکه مدل پاس داده شده Alborz.ProductInfo هست و با توجه به اینکه شما در View مورد نظر مدل رو درست تعریف کردین و نوع مدل پاس داده شده در کنترلر هم درست هست پس احتمال زیاد شناسایی View خودکار درست انجام نشده. خط آخر مسیر View رو صریح بیان کنید:
return View("Product", productList);

zahraRF
شنبه 02 مرداد 1395, 14:29 عصر
متن پیام خطا به این موضوع اشاره میکنه که Viewای حال حاضر انتظار مدلی از نوع Alborz.Category رو داره در حالیکه مدل پاس داده شده Alborz.ProductInfo هست و با توجه به اینکه شما در View مورد نظر مدل رو درست تعریف کردین و نوع مدل پاس داده شده در کنترلر هم درست هست پس احتمال زیاد شناسایی View خودکار درست انجام نشده. خط آخر مسیر View رو صریح بیان کنید:
returnView("Product", productList);


ممنون، انجام دادم کاری که گفتینو ولی تاثیری نداشت همون ارور رو میده :(

zahraRF
شنبه 02 مرداد 1395, 14:35 عصر
من فکر می کنم تنونستم ارتباط درستی بین جدول category و productINFo ایجاد کنم .

bomb23
شنبه 02 مرداد 1395, 15:59 عصر
ممنون، انجام دادم کاری که گفتینو ولی تاثیری نداشت همون ارور رو میده :(

خطا داره میگه که شما به جای

@model List<Alborz.Category>




دارید از

@model List<Alborz.ProductInfo>

در واقع بالای ویوتون به نظر میرسه @model List<Alborz.Category> فراخونی شده باشه به جای ProductInfo!
بالای ویوتون استفاده میکنید! به نظرم با دقت بیشتری بررسی کنید. clean و rebuild کردن سولوشن هم تست کنید. اگر باز به نتیجه نرسیدید از کنترلر و ویو و دو مدل مربوطه رو اتچ کنید

alireza_s_84
شنبه 02 مرداد 1395, 17:43 عصر
ممنون، انجام دادم کاری که گفتینو ولی تاثیری نداشت همون ارور رو میده :(

دیاگرام Model Context رو قرار بدین تا بررسی کنیم.

Moien Tajik
شنبه 02 مرداد 1395, 22:18 عصر
توی کنترلر نوشتید ProductInfoes :


public ActionResult Product(int id) {
var context = new AlborzEntities();
var productList = context.ProductInfoes.Where(x => x.CategoryId==id).ToList();
return View(productList);
}



اما در ویو نوشتید " ProductInfo " :


@model List<Alborz.ProductInfo>



خطا هم داره میگه باید مدل صفحه از نوع Alborz.Category باشه !!

zahraRF
یک شنبه 03 مرداد 1395, 07:54 صبح
نگاه کنید این صفحه Category هست که توش ادرس دادم بیاد به صفحه product که می خوام محصولاتمو ببینم
@model List<Alborz.Category>
@foreach (var item in Model)
{


<div class="grid_1_of_4 images_1_of_4">
<a href="@Url.Content("/Home/Product/" + item.ID)"><img src="@item.Image" alt="" /></a>
<div class="button" style="width:100%"><span><img src="images/cart.jpg" alt="" /><a href="preview-3.html">@item.Title</a></span> </div>
</div>
}



@{

که اینجا گفتم بره تو صفحه product
حالا تو این صفحه بالا ویو گفتم از مدل Product استفاده کنه چون میقوام از فیلد های جدول product استفاده کنم پس نمی تونم بنویسم <alborz.Category>
@model List<Alborz.ProductInfo>
@foreach (var item in Model)
{


<div class="grid_1_of_4 images_1_of_4">
<a href="#"><img src="@item.Image" alt="" /></a>
<h2>


@item.Name
</h2>

<p><span class="price">@item.Price</span></p>
<div class="button"><span><img src="images/cart.jpg" alt="" /><a href="preview-3.html" class="cart-button">افزودن به سبد خرید</a></span> </div>
<div class="button"><span><a href="preview-3.html" class="details">جزئیات</a></span></div>
</div> }

</div>

</div>
</div>



141627

bomb23
یک شنبه 03 مرداد 1395, 08:12 صبح
@{[/CSHARP]

که اینجا گفتم بره تو صفحه product
حالا تو این صفحه بالا ویو گفتم از مدل Product استفاده کنه چون میقوام از فیلد های جدول product استفاده کنم پس نمی تونم بنویسم <alborz.Category>
@model List<Alborz.ProductInfo>
@foreach (var item in Model)
{


<div class="grid_1_of_4 images_1_of_4">
<a href="#"><img src="@item.Image" alt="" /></a>
<h2>


@item.Name
</h2>

<p><span class="price">@item.Price</span></p>
<div class="button"><span><img src="images/cart.jpg" alt="" /><a href="preview-3.html" class="cart-button">افزودن به سبد خرید</a></span> </div>
<div class="button"><span><a href="preview-3.html" class="details">جزئیات</a></span></div>
</div> }

</div>

</div>
</div>





فک میکنم همینجا اشتباه کردید اولا که با وجود category بالای ویو هم میتونید به productinfoها دسترسی داشته باشید. کافیه بزنید Category.ProductInfo حالا اگه دوباره دات بزنید فیلدهای این یکی جدولتون بالا میاد و میتونید استفاده کنید. احتمال زیاد شما داخل کنترلر این ویو محصولاتتون دارید مدل اشتباه رو ارسال میکنید.

zahraRF
یک شنبه 03 مرداد 1395, 08:21 صبح
فک میکنم همینجا اشتباه کردید اولا که با وجود category بالای ویو هم میتونید به productinfoها دسترسی داشته باشید. کافیه بزنید Category.ProductInfo حالا اگه دوباره دات بزنید فیلدهای این یکی جدولتون بالا میاد و میتونید استفاده کنید. احتمال زیاد شما داخل کنترلر این ویو محصولاتتون دارید مدل اشتباه رو ارسال میکنید.
یعنی بزنم @Model <alborz.category.productinfo< نمیشه که :O

bomb23
یک شنبه 03 مرداد 1395, 09:18 صبح
نه شما باید دقیقا مدلی که در کنترلر پاس دادید رو اینجا بنویسید مدل پاس داده شده در کنترلر چی هستش؟
من کلیت کار رو گفتم که چنین امکانی هم وجود داره البته نه بالای ویو. شما میتونید category رو بالا بنویسید بعد به productinfo ها دسترسی دارید.

zahraRF
یک شنبه 03 مرداد 1395, 09:25 صبح
نه شما باید دقیقا مدلی که در کنترلر پاس دادید رو اینجا بنویسید مدل پاس داده شده در کنترلر چی هستش؟
من کلیت کار رو گفتم که چنین امکانی هم وجود داره البته نه بالای ویو. شما میتونید category رو بالا بنویسید بعد به productinfo ها دسترسی دارید.

public ActionResult Category(int id) {
var context = new AlborzEntities();
var ProductCategory =context.Categories.Where(x =>(int)x.ParentID == id).ToList();
return View(ProductCategory);
}


public ActionResult Product(int id)
{
var context = new AlborzEntities();
var productList = context.ProductInfoes.Where(x => x.CategoryId==id).ToList();
return View(productList);
}

bomb23
یک شنبه 03 مرداد 1395, 09:46 صبح
اینجا که چیز خاصی اشتباه نیست دسترسی بدید به پروژه که بررسی بشه.

saeedr22
یک شنبه 03 مرداد 1395, 12:11 عصر
ممکنه شما 2 اکشن با نام Product داشته باشید.و اونیکی اجرا شده باشه