Как получить данные модели в выпадающий список - PullRequest
0 голосов
/ 17 апреля 2019

Попытка заполнить поле раскрывающегося списка данными из модели.При выполнении кода я получаю сообщение об ошибке: «Исключение:« System.InvalidOperationException »в System.Web.Mvc.dll» на экране вывода VS2017.

Модель:

namespace FulfillmentPortal.Models
{
using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Collections.Generic;

public partial class Carrier
{
    public int CarrierId { get; set; }

    [StringLength(50)]
    public string CarrierName { get; set; }
}

public partial class CarrierModel : DbContext
{
    public CarrierModel()
        : base("name=CarrierModel")
    {
    }

    public virtual DbSet<Carrier> Carriers { get; set; }

    public virtual DbSet<CarrierService> CarrierServices { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    }
}
}

Контроллер:

namespace FulfillmentPortal.Controllers
{
public class FulfillmentController : Controller
{
    private CarrierModel db = new CarrierModel();

    // GET: Fulfillment
    public ActionResult Index()
    {
        var carrierList = db.Carriers.ToList();
        return View(carrierList);
    }  
}
}

Вид:

@model FulfillmentPortal.Models.Carrier
@{
    ViewBag.Title = "index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="panel panel-primary">
<div class="panel-heading">REPORT OPTIONS</div>
<div class="panel-body">
<form id="processForm" class="form-horizontal" action="~/Fulfillment/Report" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="sel1">Carrier:</label>
        @Html.DropDownListFor(m => m.Carriers, new SelectList(Model.Carriers, "CarrierId", "CarrierName"), " ");       
        <label for="sel2">Carrier Services:</label>
        <select class="form-control" id="sel2" style="width: auto; margin-bottom:15px;">
            <option value="-1" selected>Select One</option>
        </select>
    </div>
</form>
</div>
</div>

Любая помощь будет оценена.

1 Ответ

1 голос
/ 17 апреля 2019

Проблема в том, что вы передаете в список список объектов-носителей .

var carrierList = db.Carriers.ToList();
return View(carrierList);

Но ваш взгляд принимает один объект Carrier

@model FulfillmentPortal.Models.Carrier

Если вы хотите следовать шаблону MVC:

Вы должны создать новый объект Viewmodel, который содержит список объектов Carrier, который вы затем передадите в представление.

class ViewModel {
   public List<Carrier> carrierList {get; set;}
}

В вашем контроллере:

public ActionResult Index()
{
    ViewModel vm = new ViewModel();
    vm.carrierlist = db.Carriers.ToList();
    return View(vm);
}  

Ваше представление должно затем принять объект ViewModel:

@model ViewModel

Если вы не хотитеследуйте шаблону MVC:

Измените свое представление, чтобы принять список объектов Carrier

@model List<FulfillmentPortal.Models.Carrier>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...