我想做的是从数据库中创建所有“站”的下拉菜单,并选择一个在地图上对其进行缩放的下拉菜单。 我刚刚使用以下代码创建了一个名为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>
任何想法我该如何解决?
答案 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可获得不属于模型的其他信息。