دسته بندی ها
21:01 1399/06/30

نحوه ارسال Model به ViewComponent در Asp.net Core

مشخصات سوال کننده :
کاربر : fateme     امتیاز کاربر : 1635     رتبه کاربر : 2
دسته بندی : Asp.net Core

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

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

مسیله ی شما به دلیل نوع داده ای که به ViewComponent ارسال می کنید به وجود آمده است. شما در حال ارسال یک مجموعه (IEnumerable) از نوع CourseListForDisplayViewModel به ViewComponent هستید، در حالی که متد Invoke انتظار یک شیء از نوع CourseListForDisplayViewModel را دارد.

برای رفع این مشکل، کافی است که متد Invoke در CourseListViewComponent را به گونه ای تغییر دهید که بتواند یک IEnumerable را دریافت کند. به این صورت:


    [ViewComponent(Name = "myComponent")]
    public class CourseListViewComponent : ViewComponent
    {
        private readonly ICourseRepository _icourse;

        public CourseListViewComponent(ICourseRepository icourse)
        {
            _icourse = icourse;
        }

        public IViewComponentResult Invoke(IEnumerable model)
        {
            return View(model);
        }
    }

سپس در ویو خود، می توانید به سادگی همین Model را به ViewComponent ارسال کنید که در حال حاضر در حال انجام آن هستید:

@await Component.InvokeAsync("myViewComponent", Model)

این تغییرات باید مشکل شما را حل کند. حالا می توانید برنامه ی خود را اجرا کنید و دیگر با خطای نوع داده مواجه نخواهید شد.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 21:08 1399/06/30

نحوه ارسال Model به ViewComponent در Asp.net Core

دستوراتی که شما نوشتید تا حد زیادی درست هست اما اشکالاتی داره. اول اینکه بهتره که به Model که میخواید ارسال کنید یه اسم بدید و در کلاس مربوط به Component هم با همون نام دریافتش کنید. کدهای زیر رو دقت کنید :

@model IEnumerable<CourseListForDisplayViewModel>

<div class="content">
    <form>
        <div class="panel panel-body">
           
        </div>
    </form>
    @await Component.InvokeAsync("myViewComponent", new {mModel = Model})
</div>

 

نکته بعد هم اینکه Model شما یک IEnumerable هست. بنابراین باید در کلاس مربوط به View Component هم یک IEnumerable دریافت کنید نه یک Model تنها. کدهای زیر رو دقت بفرمایید

  [ViewComponent(Name = "myComponent")]
    public class CourseListViewComponent : ViewComponent
    {
        private readonly ICourseRepository _icourse;

        public CourseListViewComponent(ICourseRepository icourse)
        {
            _icourse = icourse;
        }

        public IViewComponentResult Invoke(IEnumerable<CourseListForDisplayViewModel> model)
        {
            return View(model);
        }
    }

 

بنظر نمیاد مشکل دیگه ای وجود داشته باشه.

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
1 نظر
fateme : متشکر بابت پاسخ

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 01:43 1399/07/18
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود