دسته بندی ها
12:15 1400/01/29

دلیل خطای The model item passed into the ViewDataDictionary is of type X but this ...

مشخصات سوال کننده :
کاربر : AmirrezaAndshmand     امتیاز کاربر : 0     رتبه کاربر : 7063
دسته بندی : Asp.net Core Asp.net Mvc

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3390
هوش مصنوعی

پاسخ هوش مصنوعی

به نظر می رسد که خطای شما ناشی از نوع مدلی است که به ویو ارسال می کنید. این خطا معمولاً زمانی رخ می دهد که نوع مدل ارایه شده به ویو با نوع مدلی که در قالب (View) مشخص شده، مطابقت نداشته باشد.

برای حل این مشکل، مطمین شوید که:

  • در دو اکشن Dashboard و Resume، مطمین شوید که مدل نوع RelationModels را به درستی به ویو ارسال می کنید.
  • نوع مدل در ویو (Razor) دقیقاً به صورت زیر تعریف شده باشد:
@model Services.Model.RelationModels

همچنین بررسی کنید که آیا کامپوننت ها (ماژول ها) یا بخش های دیگری که در ویو استفاده می کنید، مدلی از نوع دیگری را انتظار دارند یا خیر. اگر این چنین مواردی وجود داشته باشد، منجر به ایجاد خطاهایی مانند خطای شما می شود.

اگر بعد از چک کردن موارد فوق هنوز با مشکل مواجه هستید، حتماً نوع مدل هایی که به ویو ارسال می کنید و نوع تعاریف سازنده های هریک از مدل ها را بررسی کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 15:09 1400/01/30

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

The model item passed into the dictionary is of type .. but this dictionary requires a model item of type

کدهایی که شما قرار دادید کامل نیست. در واقع شما در کلاس RelationModels از چندین کلاس و مدل و ViewModel دیگه استفاده کردید. از طرفی در اکشن متد Dashboard میخواید این مدل رو که خودش شامل چندین و چند مدل و ویومدل دیگه هست رو مقدار دهی کنید.

خب در اکشن Dashboard شما مدل ورودی یا همون پارامتر رو RelationModels که خودش شامل چندین کلاس و مدل هست تعریف کردید. اما در بدنه اکشن گفتید model.CardViewModel یعنی فقط به یکی از مدلهای درونی این کلاس که از نوع IEnumerable هم هست خواستید مقدار بدید.

 

خب چند تا حالت این جا پیش میاد :

اول اینکه بنظرم ایجاد یک مدل مثل RelationModels که شامل این همه کلاس و ویو و مدل باشه صحیح نیست. شاید به نظر میاد که جمع و جورتر کدنویسی کردید، اما مدیریت خطا خیلی سختتر میشه اینجوری.

دوم اینکه در RelationModels پراپرتی CardViewModel از نوع لیستی هست (IEnumerable). خب آیا مطمئن هستید که متد GetCard هم یک لیست رو داره برمی گردونه ؟

 

پیشنهاد :

برای اینکه کارتون ساده تر بشه و همچنین وقتی میخواید سوال بپرسید بتونید راحتتر سوال رو بپرسید و کسی که میخواد پاسخ بده هم راحتتر باشه بنظرم مدلهایی مثل RelationModels رو ایجاد نکنید چون این مدل شامل چندین کلاس و ... هست و بررسی رو سخت میکنه.

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
2 نظر
AmirrezaAndshmand : با سلام و تشکر Getcard داره یه لیست از نوع ienumrable بر میگردونه. خب الان من تو یه صفحه با چند تا ویو مدل کار دارم شما راهی به عنوان پیشنهاد دارین؟

امتیاز کاربر : 0   رتبه کاربر : 7063   تاریخ ثبت : 03:28 1400/01/30
saedbfd : البته تا پروژه دیده نشه نمیشه دقیق نظر داد. ولی شاید یک راه حل مناسب این باشه که وقتی در یک View شما چندین مدل نیاز دارید بیاید و از ViewComponent ها استفاده کنید. اینجوری هم طراحی صفحه دسته بندی میشه و هم اینکه دیگه هر مدل میره داخل ViewComponent خودش و نیاز نیست یک مدل مادر داشته باشید.

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 06:54 1400/01/30
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود