nyt1972 Ответов: 1

Asp.net MVC5 частичное представление на основе выпадающего списка


Привет,

У меня есть две таблицы, Class и ClassFee, связанные с полем ClassID, и я хочу, чтобы, когда класс выбран в раскрывающемся списке классов, то ClassFee должен быть извлечен и отображен.

Для этого я создал метод в контроллере.

[HttpGet]
     public PartialViewResult GetClassFee(int? Classid)
     {
         ClassFeeVM CFee = new ClassFeeVM();
         if (Classid != null)
         {
            List<ClassFee> classfees = db.ClassFees.Where(p => p.tblClass.ClassID == Classid).ToList();
             foreach (var item in classfees)
             {
                 CFee.ClassFee = item.ClassFee1;
                 CFee.ClassID = item.ClassID;
                 CFee.ClassName = item.tblClass.ClassName;
                 CFee.FeeType = item.tblFeeType.FeeType;
             }
         //   ViewBag.ClassFees = CFee;
         }
         return PartialView("_ClassFee", CFee);
     }


Ошибка заключается в том, что вместо значений он отображается как есть

The model item passed into the dictionary is of type 'SchoolMVC.Models.ViewModel.ClassFeeVM', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[SchoolMVC.Models.ViewModel.ClassFeeVM]'.


Что я уже пробовал:

Мой код JQuery/Ajax для изменения выпадающего списка даже есть:
$(function () {
               $("#ClassID").on("change", function () {

                   var url = '@Url.Action("GetClassFee", "ClassFees")' + "?Classid=" + $(this).val();

                   $("#ClassFeeDetails").load(url, function (data) {
                       $("#ClassFeeDetails").html(data);
                   });
               });
           });


И моя частичная точка зрения такова:

@model IEnumerable<SchoolMVC.Models.ViewModel.ClassFeeVM>

    @foreach (var item in Model)
    {
        <p>@item.ClassFee</p>
        <p>@item.FeeType</p>
        <p>@item.ClassName</p>
    }

Sandeep Mewara

Кажется, ты забыл поделиться тем, где застрял.

1 Ответов

Рейтинг:
9

Richard Deeming

Ошибка довольно ясна - ваше представление объявляет модель IEnumerable<ClassFeeVM>, но вы пытаетесь пройти в одном ClassFeeVM пример.

Перепишите свой код, чтобы правильно создать и заполнить список виртуальных машин и передать его в модель:

[HttpGet]
public PartialViewResult GetClassFee(int? Classid)
{
    if (Classid == null) return NotFound();
   
    List<ClassFee> classfees = db.ClassFees.Where(p => p.tblClass.ClassID == Classid).ToList();
    List<ClassFeeVM> model = new List<ClassFeeVM>(classfees.Count);
    foreach (var item in classfees)
    {
        model.Add(new ClassFeeVM
        {
            ClassFee = item.ClassFee1,
            ClassID = item.ClassID,
            ClassName = item.tblClass.ClassName,
            FeeType = item.tblFeeType.FeeType,
        });
    }
    
    return PartialView("_ClassFee", model);
}