如何用我的数据库条目创建一个下拉列表?

时间:2019-05-06 19:24:46

标签: javascript c# asp.net asp.net-core

我想做的是从数据库中创建所有“站”的下拉菜单,并选择一个在地图上对其进行缩放的下拉菜单。 我刚刚使用以下代码创建了一个名为AdminMapController的控制器:

    public class AdminMapController : Controller
    {
        private readonly ApplicationDbContext _context;

        public AdminMapController(ApplicationDbContext context)
        {
            _context = context;
        }
        public ActionResult GetListOfStations()
        {
            ViewBag.ListOfDropdown = _context.Stations.ToList();
            return View("~/Areas/Identity/Pages/Account/AdminMap.cshtml");
        }
        public JsonResult GetAllLocation()
        {
            var data = _context.Stations.ToList();
            return Json(data);
        }

和视图(仅下拉测试):

    </style>
    <br/><br/>
    <div>
        <select class="form-control">
            <option>--Select--</option>
            @foreach (var item in ViewBag.ListOfDropdown)
            {
                <option value ="@item.Id">@item.Name</option>
            }
        </select>
    </div>
    <br/>

GetAllLocation方法可以正常工作的有趣之处,但是GetListOfStations抛出错误NullReferenceException: Object reference not set to an instance of an object.,这些错误是“问题”:@foreach (var item in ViewBag.ListOfDropdown)ViewData["Title"] = "Admin Map"; < / p>

任何想法我该如何解决?

2 个答案:

答案 0 :(得分:1)

我认为您应该在返回操作中使用此选项:

var model = _context.Stations.ToList();
return View("~/Areas/Identity/Pages/Account/AdminMap.cshtml", model);

查看:

@model List<Stations>
<div>
        <select class="form-control">
            <option>--Select--</option>
            @foreach (var item in Model)
            {
                <option value ="@item.Id">@item.Name</option>
            }
        </select>
    </div>

答案 1 :(得分:0)

如果您不想在这种情况下不使用模型,另一种方法是改为使用“ ViewData”:

ViewData["Stations"] = _context.Stations.ToList();

在视图中,像这样:

@foreach (var item in ViewData["Stations"] as IList<Stations>)

但是我仍然认为模型在您的情况下更有用。 使用ViewData可获得不属于模型的其他信息。