我有来自Bus.cs的Index.cshtml脚手架中的数据表
public class Bus
{
public int BusID { get; set; }
public int BusOwnerID { get; set; }
public string RegistrationNo { get; set; }
}
在索引页面中,我需要在BusOwner.cs中包含一个包含BusOwnerID和BusOwnerName的下拉列表
public class BusOwner
{
public int BusOwnerID { get; set; }
public string BusOwnerName { get; set; }
public string Moblie { get; set; }
public string EmailID { get; set; }
}
在控制器中我有以下内容,
public ActionResult Index()
{
ViewBag.Genres = db.BusOwners.Select(i => new SelectListItem { Value = i.BusOwnerID.ToString(), Text = i.BusOwnerName });
return View(db.Buses.ToList());
}
在视图中,index.cshtml我需要一个带有BusOwnerID和BusOwnerName的下拉框。在选择时,我需要显示选定BusOwnerID下的公交车的详细信息。
我尝试了以下
@Html.DropDownListFor(model => model.BusOwnerID, new SelectList(ViewBag.Genres), "Choose... ")
但是发生错误。
CS1061: 'System.Collections.Generic.IEnumerable<RaspberryPi.Models.Bus>' does not contain a definition for 'BusOwnerID' and no extension method 'BusOwnerID' accepting a first argument of type 'System.Collections.Generic.IEnumerable<RaspberryPi.Models.Bus>' could be found (are you missing a using directive or an assembly reference?)
Index.cshtml
@model IEnumerable<RaspberryPi.Models.Bus>
@{
ViewBag.Title = "Buses";
}
<div class="btn-group">
<a href="/Buses/Create" class="btn btn-primary btn-lg">Create New</a>
</div>
@*@Html.LabelFor(model => model.BusOwnerID)
@Html.DropDownListFor(model => model.SelectRegionId, Model.Regions, "Choose... ")
@Html.DropDownList("drop", new SelectList(ViewBag.Genres));*@
<div id="Ttable" style="background:#f5f5f5;position:relative;width:100%;height:25%;">
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.RegistrationNo)</th>
<th>@Html.DisplayNameFor(model => model.BusTypes)</th>
<th>Edit</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayNameFor(model => model.RegistrationNo)
</td>
<td>
@Html.DisplayNameFor(model => model.BusTypes)
</td>
<td>
<div class="btn-group">
<button type="button" class="btn-primary btn-xs" onclick="location.href = '/Buses/Details/@item.BusID';"><span class="glyphicon glyphicon-th"></span></button>
<button type="button" class="btn-success btn-xs" onclick="location.href = '/Buses/Edit/@item.BusID';"><span class="glyphicon glyphicon-pencil"></span></button>
<button type="button" class="btn-danger btn-xs" onclick="location.href = '/Buses/Delete/@item.BusID';"><span class="glyphicon glyphicon-remove"></span></button>
</div>
</td>
</tr>
}
</tbody>
</table>
</div>
我如何实现这一目标?
请帮忙, 感谢。
答案 0 :(得分:1)
这样做
在创建下拉菜单之前,在您的视图上列出BusOwner
var busOwnerList=BusOwner.GetAll(); //Make static method in your class to return all owner
现在
@Html.DropDownListFor(model => model.BusOwnerID, new SelectList(busOwnerList, "BusOwnerID", "BusOwnerName") as SelectList, "Choose... ")
答案 1 :(得分:0)
错误表示模型中没有属性BusOwnerId
。
此外,错误告诉我们模型的类型为IEnumerable
。
在您的情况下,BusOwnerId
仅存在于Bus
的单个实例上,而不存在于总线集合中。所以有两种选择。
1将单个总线作为模型返回视图
而不是:
return View(db.Buses.ToList());
尝试
return View(db.Buses.FirstOrDefault());
这将从数据库返回第一个总线。
2或者您可以遍历模型中的每个总线条目并显示每个总线的下拉框:
foreach(var bus in Model)
{
@Html.DropDownListFor(x => bus.BusOwnerID, new SelectList(ViewBag.Genres), "Choose...
}
请注意,在lamda中我绑定到x => bus.busOwnerId
而不是x => x.BusOwnerId
,因为x.BusOwnerId
表示BusOwnerId是模型上的属性。这不是因为模型是一个集合。