【问题标题】:How to create a dropdown list with my database entries?如何使用我的数据库条目创建下拉列表?
【发布时间】:2019-09-24 10:38:53
【问题描述】:

我要做的是创建一个下拉列表,其中包含数据库中的所有“站”,并在选择一个以在地图上放大它时。 我刚刚使用以下代码创建了一个名为 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";

知道如何解决这个问题吗?

【问题讨论】:

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


    【解决方案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>
    

    【讨论】:

    • 是的,但我不确定我应该如何在 cshtml 的 foreach 中使用它。
    • 它仍然不起作用...我开始认为数据不是来自数据库..
    • 是的,我设法获取了数据,它对我有用,非常感谢。
    【解决方案2】:

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

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

    在视图中是这样的:

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

    但我仍然认为模型对您的情况更有用。 使用 ViewData 获取不属于模型的额外信息。

    【讨论】:

    • 我也对 ViewBag 进行了一些研究,看来您所缺少的可能是“as IList”。 ViewData 和 ViewBag 都应该可以工作
    • 是的,经过一番研究,我发现我应该能够同时使用ViewDataViewBag 获取信息,但由于某种原因,它们都没有工作,所以我不得不重做我的视图和控制器,因为当我使用return View("path") 将信息发送到视图时,视图没有得到应有的信息。但你是对的,我没有尝试IList&lt;Stations&gt;,因为我认为 ViewBag 正在完成这项工作。无论如何感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多